我有一个 250×200 的大矩阵。它里面是 50-x-50 较小的 5-x-4 矩阵。
reshape 矩阵以使 2500 个 5×4 较小的矩阵彼此水平对齐的最佳方法是什么?所以大矩阵的最终维度应该是 5-x-10000。
最佳答案
Matlab 的reshape
函数非常方便(而且速度很快),但总是读取和写入完整 列。因此,对于您的问题,需要一些额外的步骤。
这里是你如何做到的:
m = 5 % columns of submatrix
n = 4 % rows of submatrix
k = 50 % num submatrixes in matrix column
l = 50 % num submatrixes in matrix row
A = rand(m*k,n*l); % rand(250,200)
将矩阵 reshape 为四维矩阵(维度 x1、x2、x3、x4),其中每个子矩阵位于 x1-x3 平面中。原始矩阵的子矩阵列在x2方向,子矩阵行在x4方向。
B = reshape(A,[m,k,n,l]); % [4,50,5,50]
置换(“转置”)4D 矩阵,使每个子矩阵都位于 x1-x2 平面中。 (reshape
首先读取列,然后是行,然后是第 3 维,等等)
C = permute(B,[1,3,4,2]); % For column-wise reshaping, use [1,3,2,4]
将 4D 矩阵 reshape 为所需的 2D 输出矩阵。
D = reshape(C,m,[]);
关于Matlab:基于子矩阵 reshape 大矩阵的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31695877/