我有一个包含类型(float32)numpy数组的列表:
list = [array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ], dtype=float32), array([ 0.1675, -0.268, -0.139, 0.195 ], dtype=float32)]
我想将其转换为2d numpy数组。像这样:
array([[ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ],[ 0.1675, -0.268, -0.139, 0.195 ]], dtype=float32)
我尝试做numpy.array(list)
,就像该网站上类似问题的答案所示,但它并没有改变,我怀疑是因为键入了numpy数组。如何做到这一点?
答案 0 :(得分:2)
typing
与它无关。所有的numpy数组都有一个dtype
,即使打印显示中没有显示它也是如此。
通过显示重新创建列表:
In [428]: alist = [np.array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ]), np.array([ 0.1675, -0.268,
...: -0.139, 0.195 ])]
In [429]: alist
Out[429]:
[array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ]),
array([ 0.1675, -0.268 , -0.139 , 0.195 ])]
正如一些评论所指出的,将np.array
应用于列表会创建一个2d数组:
In [430]: np.array(alist)
Out[430]:
array([[ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ],
[ 0.1675 , -0.268 , -0.139 , 0.195 ]])
np.stack
也是一样。
In [431]: np.stack(alist)
Out[431]:
array([[ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ],
[ 0.1675 , -0.268 , -0.139 , 0.195 ]])
有时人们从对象的dtype数组开始。在这种情况下,stack
会在np.array
无效的情况下起作用。
但是,如果列表中的数组形状不同,则两者都不起作用。
In [432]: alist = [np.array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ]), np.array([ 0.1675, -0.268,
...: -0.139])] # remove an element
In [433]: np.array(alist)
Out[433]:
array([array([ 0.02741675, -0.23331268, -0.04920139, 0.2501195 ]),
array([ 0.1675, -0.268 , -0.139 ])], dtype=object)
In [434]: np.stack(alist)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-434-724d9c1d0554> in <module>
----> 1 np.stack(alist)
/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py in stack(arrays, axis, out)
414 shapes = {arr.shape for arr in arrays}
415 if len(shapes) != 1:
--> 416 raise ValueError('all input arrays must have the same shape')
417
418 result_ndim = arrays[0].ndim + 1
ValueError: all input arrays must have the same shape