二维数组的特定于Numpy的重塑顺序

时间:2019-05-13 18:41:01

标签: python-3.x numpy reshape

我有一个4x3矩阵,需要按特定顺序将其重塑为2x6矩阵:

初始: | 1 5 9 | | 2 6 10 | | 3 7 11 | | 4 8 12 |

想要的: | 1 2 5 6 9 10 | | 3 4 7 8 11 12 |

我尝试使用numpy进行转换,但是顺序不是我期望的:

import numpy as np
a=np.array([[1,5,9],[2,6,10],[3,17,11],[4,8,12]])
b=a.reshape(2,6)
print(a)
print(b)

1 个答案:

答案 0 :(得分:1)

Reshape, permute and reshape-

In [51]: n = 2 # no. of rows to select from input to form each row of output

In [52]: a.reshape(-1,n,a.shape[1]).swapaxes(1,2).reshape(-1,n*a.shape[1])
Out[52]: 
array([[ 1,  2,  5,  6,  9, 10],
       [ 3,  4, 17,  8, 11, 12]])

说明的排序:

  1. 沿第一个轴剪切,以3D数组结束,以便我们沿第二个轴选择n。将第二个轴与最后一个(第三个)轴交换,以便我们将第二个轴推回到末端。

  2. 重塑为2D以合并最后两个轴。这就是我们的输出!

有关详细信息,请参阅链接的问答。


如果给出输出中的行数-

In [54]: nrows = 2 # number of rows in output

In [55]: a.reshape(nrows,-1,a.shape[1]).swapaxes(1,2).reshape(nrows,-1)
Out[55]: 
array([[ 1,  2,  5,  6,  9, 10],
       [ 3,  4, 17,  8, 11, 12]])