在Python中将列表转换为NumPy数组的问题

4
我想将这个列表转换为一个numpy数组:
var=[array([ 33.85967782]), array([ 34.07298272]), array([ 35.06835424])]

结果应该如下所示:
[[ 33.85967782]
 [ 34.07298272]
 [ 35.06835424]]

但是,如果我输入 var = np.array(var),结果如下:

[array([ 33.85967782]) array([ 34.07298272]) array([ 35.06835424])]

我有numpy库:import numpy as np

2个回答

5

np.vstack是执行此操作的标准方法:

>>> var=[np.array([ 33.85967782]), np.array([ 34.07298272]), np.array([ 35.06835424])]

>>> np.vstack(var)
array([[ 33.85967782],
       [ 34.07298272],
       [ 35.06835424]])

如果你想要一个形状为(n,1)的数组,但是你有多个元素的数组,你可以按照以下步骤进行操作:
>>> var=[np.array([ 33.85967782]), np.array([ 35.06835424, 39.21316439])]
>>> np.concatenate(var).reshape(-1,1)
array([[ 33.85967782],
       [ 35.06835424],
       [ 39.21316439]])

追溯(最近的调用在最后): 文件“/home/worm1988/Desktop/Tesi/appoggio.py”,第78行,在<module>中: var = numpy.vstack(var) 文件“/usr/lib/python2.7/dist-packages/numpy/core/shape_base.py”,第226行,vstack: return _nx.concatenate(map(atleast_2d,tup),0) 值错误:除了连接轴之外,所有输入数组维度必须完全匹配 - elviuz
1
@Elvio,一个numpy数组的所有元素必须具有相同的形状,这只是说并非所有元素都具有相同的形状。您正在处理的数据似乎与所示数据不同,请更新您的帖子以包含相关数据。 - Daniel
@Ophion,请尝试使用此数据,谢谢。https://gist.github.com/worm1988/9af484900aac7db3a5f1 - elviuz
2
@Elvio 最后一个数组有两个元素,而其他所有数组只有一个元素。将最后一个数组拆分成两个可以解决问题,并且使用 np.vstack 可以正常工作。请参见我帖子中的另一个选项。 - Daniel

4
我不知道为什么你的方法无效,但是这个方法对我有效:

>>> import numpy as np
>>> from numpy import array
>>> var=[array([ 33.85967782]), array([ 34.07298272]), array([ 35.06835424])]
>>> np.array(var)
array([[ 33.85967782],
       [ 34.07298272],
       [ 35.06835424]])

这也可行(新解释器):
>>> import numpy as np
>>> var = [np.array([ 33.85967782]), np.array([ 34.07298272]), np.array([ 35.06835424])]
>>> np.array(var)
array([[ 33.85967782],
       [ 34.07298272],
       [ 35.06835424]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接