Matlab实现4x4矩阵转多组2x2子矩阵并存入单个变量
Matlab 4×4矩阵拆分2×2子矩阵精简实现
方法1:mat2cell(最直观易读,代码极简)
这是最直接的实现方式,利用Matlab内置的矩阵拆分函数完成:
% 定义示例4×4矩阵(替换为你的目标矩阵A即可) A = magic(4); % 拆分并存入cell变量subMats subMats = mat2cell(A, [2,2], [2,2]);
- 结果:
subMats是2×2的cell数组,每个元素对应一个2×2子矩阵:subMats{1,1}= 左上块(A(1:2,1:2))subMats{1,2}= 右上块(A(1:2,3:4))subMats{2,1}= 左下块(A(3:4,1:2))subMats{2,2}= 右下块(A(3:4,3:4))
方法2:一行代码极致精简(维度重排法)
如果追求最少代码行数,可通过维度重排+cell转换实现:
subMats = reshape(num2cell(reshape(A,2,2,[]),[1,2]),2,2);
- 逻辑拆解:
reshape(A,2,2,[]):将4×4矩阵重排为2×2×4的三维数组,每个2×2切片对应一个子矩阵num2cell(...,[1,2]):将每个2×2切片转为独立的cell元素,得到1×4的cell数组reshape(...,2,2):将1×4的cell数组转为2×2结构,和方法1的输出格式一致
额外提示
如果需要将子矩阵按一维顺序存储(而非2×2结构),可简化为:
subMats = num2cell(reshape(A,2,2,[]),[1,2]);
此时subMats是1×4的cell数组,子矩阵顺序为左上→右上→左下→右下。
内容的提问来源于stack exchange,提问作者Rohan Dhingra
相关产品推荐
相关产品推荐

