在没有for循环的情况下将一组矩阵重塑为一个矩阵

Reshaping an array of matrices into one matrix without a for-loop

我想将矩阵数组重新整形为单个矩阵,这样如果原始数组的形状为 (n, m, N),则新矩阵 X 的形状为 (N, nxm) 并且在某种程度上这样如果我们查看 X[i,:].reshape(n,m) 我们就会得到原始的第 i 个矩阵。

这可以通过 for 循环和 ravel 来完成:

X = np.zeros((N, n*m))
for i in range(N):
  X[i, :]=Y[:,:,i].ravel() # Y is the original array with shape (n,m,N)
print(X.shape)

问题 有没有办法在不使用 for 循环的情况下做到这一点,也许只需要重塑和其他一些功能?当我尝试在线搜索时,我并没有完全找到这种情况,并且当我们如上所述检查条目时,简单地 X=Y.reshape((N, n*m)) 不会保留矩阵结构。

np.reshape之前,可以使用np.moveaxis(例如np.moveaixs(Y, -1, 0))将Y的最后一个轴移动到第一个轴,使其大小为(N, n, m)保留矩阵结构。

列表理解

X = np.r_[[Y[:, :, i].ravel() for i in Y.shape[2]]]