给出一个包含异构元素的numpy数组foo。 如何将同构切片转换为具有多个维度的numpy数组,而不是将具有嵌套对象的怪异numpy数组转换? 示例:
foo = np.array([[[1,2,3],[1,2]],[[3,4,5],[3,4]]])
bar = foo[:,0]
bar.shape
Out[9]: (2,)
我原本期望bar具有形状(2,3),但是我却得到2个嵌套对象。 如何获得与此等效的结果:
np.array([[1,2,3],[3,4,5]])
?
答案 0 :(得分:2)
foo
是一个对象dtype数组,因为子列表的大小不同:
In [10]: foo = np.array([[[1,2,3],[1,2]],[[3,4,5],[3,4]]])
In [11]: foo
Out[11]:
array([[list([1, 2, 3]), list([1, 2])],
[list([3, 4, 5]), list([3, 4])]], dtype=object)
In [12]: foo.shape
Out[12]: (2, 2)
由于它是(2,2),因此您可以选择一个列,但它仍然是对象dtype:
In [13]: foo[:,0]
Out[13]: array([list([1, 2, 3]), list([3, 4, 5])], dtype=object)
但是concatenate
的某些版本可以将这些列表连接到新数组中。 stack
在这里效果很好:
In [14]: np.stack(foo[:,0])
Out[14]:
array([[1, 2, 3],
[3, 4, 5]])
np.vstack
也可以。 np.array
不会更改对象的dtype。
答案 1 :(得分:0)
除了hpaulj回答最后要做的事情:
np.stack(foo[:,0])
(2, 3)
用于形状