Matlab:基于子矩阵 reshape 大矩阵的最佳方法是什么

标签 matlab matrix reshape

我有一个 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/

相关文章:

c++ - LNK1120 : 1 unresolved externals and LNK2019: unresolved external symbol

MATLAB vec2mat 的 Python 等效代码

pytorch - -1 在 pytorch View 中是什么意思?

r - 从原始矩阵中选择奇数行和奇数列

c++ - 用 Eigen3 对两个矩阵进行插值

c - Matlab 用 mex 编译 C 文件时出错

matlab - imresize 双线性 MATLAB

r - 使用自定义名称转置/ reshape

matlab - 链接 AnyLogic 和 Matlab

matlab - 我如何在 MATLAB 中重现这个心形网格?