我有一个numpy数组,其中的列以块为单位。我想换位。它在概念上很简单,我想一个人可以简单地做到这一点,但是我不知道怎么做。
给出一个块形式为np.hstack(list_of_blocks)
的numpy数组,我想获取np.vstack(list_of_blocks)
。
为了更加精确,我想在下面的代码段中从数组a
转到数组b
。
import numpy as np
a = np.zeros((3,6))
b = np.zeros((9,2))
t_max = 3
for col in range(1,7):
for time in range(1,t_max+1):
val = ((1+col)//2)*100+((col+1) % 2)*10+time
a[time-1,col-1]= val
b[time+t_max*(((1+col)//2)-1)-1,((col+1) % 2)] = val
,矩阵如下:
>>> print(a)
[[101. 111. 201. 211. 301. 311.]
[102. 112. 202. 212. 302. 312.]
[103. 113. 203. 213. 303. 313.]]
>>> print(b)
[[101. 111.]
[102. 112.]
[103. 113.]
[201. 211.]
[202. 212.]
[203. 213.]
[301. 311.]
[302. 312.]
[303. 313.]]
当然,矩阵不是3 x (2*3)
而是n x (k*m)
在numpy中重塑这样的有效方法是什么?
答案 0 :(得分:2)
重塑,置换轴并重塑-
N = a.shape[1]//t_max
b_out = a.reshape(a.shape[0],-1,N).swapaxes(0,1).reshape(-1,N)
答案 1 :(得分:1)
np.vstack(np.hsplit(a,3))
完全按照要求进行操作,可读性强,但性能不及Divkar的答案。