在numpy中逐块重塑?

我有一个 numpy 数组,其中的列在块中。我想转置块。它在概念上很简单,我想人们可以简单地做到这一点,但我不知道如何做到。


给定块形式的 numpy 数组np.hstack(list_of_blocks),我想得到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 中重塑这样的有效方法是什么?


江户川乱折腾
浏览 206回答 2
2回答

神不在的星期二

重塑,置换轴和重塑 -N = a.shape[1]//t_max b_out = a.reshape(a.shape[0],-1,N).swapaxes(0,1).reshape(-1,N)更多信息intuition behind nd-to-nd array transformation。

浮云间

np.vstack(np.hsplit(a,3)) 完全按照要求执行,可读,但性能不如 Divkar 的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python