如何在np.reshape中指定顺序

时间:2019-05-04 04:18:54

标签: numpy multidimensional-array indexing flatten

我有一个形状为ndarray的numpy (t, n, h, w, c)。我想将其部分展平以得到形状为ndarray的{​​{1}}。但是,我希望能够指定这种情况发生的顺序。具体地说,我希望它以“ (t*n, h, w, c)-主要顺序”来显示。

假设我有一个n的数组A和一个A.shape = (128, 16, 160, 210, 3的数组B。它们几乎相同,除了前两个维已互换。

按如下所示对B.shape = (16, 128, 160, 210, 3)进行平铺可对数据进行分组:

B

B = B.reshape(-1, *B.shape[2:])

平整B.shape = (2048, 160, 210, 3)可以得到形状相同但数据顺序不同的数组。

我尝试了以下方法: A A = np.moveaxis(A, 0, 1)

我可以让它开始工作 A = A.reshape(-1, *A.shape[2:]),其中A = np.asarray([A[:, i, ...] for i in range(n)])是第二维的长度,但我觉得有一种更灵通的方法。

我认为,由于n(和moveaxis)创建了swapaxis(应该 来更改遍历顺序),因此默认的展平顺序基于数据的原始顺序。

如何以我想要的方式展平view

1 个答案:

答案 0 :(得分:0)

您可以使用X.reshape(t*n, h, w, c, order='F')

例如。

>>> x = np.array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

>>> x.shape
(2, 3, 4) 

>>> x.reshape(2*3, 4, order='C')
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

>>> x.reshape(2*3, 4, order='F')
array([[ 0,  1,  2,  3],
       [12, 13, 14, 15],
       [ 4,  5,  6,  7],
       [16, 17, 18, 19],
       [ 8,  9, 10, 11],
       [20, 21, 22, 23]])