首页 > 解决方案 > 在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 中像这样重塑的有效方法是什么?

标签: pythonarraysnumpy

解决方案


重塑、置换轴和重塑 -

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


推荐阅读