我有一个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)
答案 0 :(得分:1)
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]])
说明的排序:
沿第一个轴剪切,以3D
数组结束,以便我们沿第二个轴选择n
。将第二个轴与最后一个(第三个)轴交换,以便我们将第二个轴推回到末端。
重塑为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]])