如何用不同形状的数组展平一个numpy对象数组?

时间:2019-05-01 06:03:33

标签: python arrays numpy

我有一个数组a

>> a = np.array([np.ones((4,5)), np.arange(6), np.arange(20).reshape((2,2,5))])
>> a
array([array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]]),
       array([0, 1, 2, 3, 4, 5]),
       array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]]])], dtype=object)

,我想将其展平以得到类似array(1, 1, 1, ... 17, 18, 19)的内容。如何以最有效的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

平整并水平连接/堆叠-

In [36]: np.concatenate([np.ravel(i) for i in a])
Out[36]: 
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.,  1.,  2.,  3.,  4.,  5.,
        0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
       13., 14., 15., 16., 17., 18., 19.])

In [42]: np.hstack([np.ravel(i) for i in a])
Out[42]: 
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.,  1.,  2.,  3.,  4.,  5.,
        0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
       13., 14., 15., 16., 17., 18., 19.])

或与map-

np.concatenate(list(map(np.ravel,a)))
np.hstack(list(map(np.ravel,a)))