MATLAB中如何按交错列分组方式实现矩阵重塑?
高效实现MATLAB矩阵交错列分组重塑
可以利用MATLAB的reshape和permute内置函数实现,完全避免for循环,效率远高于手动循环,尤其适合处理50000×20这类大矩阵。
核心代码
% 假设A是你的50000×20矩阵 B = reshape(permute(reshape(A, size(A,1), 2, []), [1, 3, 2]), [], 2);
代码解释
分步拆解操作逻辑(以你提供的3×6示例矩阵为例):
- 拆分列组:
reshape(A, size(A,1), 2, [])将原矩阵拆分为三维数组,维度为3×2×3。其中第三维度对应"列组",每个切片是原矩阵中连续的两列(比如第一个切片是[1,2;1,2;1,2],第二个是[3,4;3,4;3,4])。 - 调整维度顺序:
permute(..., [1, 3, 2])将三维数组的第二、第三维度交换,得到维度为3×3×2的数组。这一步是为了把所有列组的行数据先堆叠在一起。 - 最终重塑:
reshape(..., [], 2)将三维数组展开为9×2的二维矩阵,正好符合你期望的交错列分组结果。
示例验证
运行以下代码:
A = [1,2,3,4,5,6; 1,2,3,4,5,6; 1,2,3,4,5,6]; B = reshape(permute(reshape(A, size(A,1), 2, []), [1,3,2]), [], 2); disp(B);
输出结果:
1 2 1 2 1 2 3 4 3 4 3 4 5 6 5 6 5 6
完全匹配你的预期。
效率优势
MATLAB的内置矩阵操作函数都是底层优化实现的,避免了for循环的解释执行开销。对于50000×20的大矩阵,这种方法的运行速度会比手动循环快几十甚至上百倍,同时内存占用也更高效。
内容的提问来源于stack exchange,提问作者nobody567
相关产品推荐
相关产品推荐

