将异构numpy数组转换为齐次

时间:2018-09-28 00:22:04

标签: python numpy

给出一个包含异构元素的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]])

2 个答案:

答案 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)用于形状