在没有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]]]
我想将矩阵数组重新整形为单个矩阵,这样如果原始数组的形状为 (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]]]