MATLAB中如何将2920×640矩阵每行后插入2行零转为8760×640矩阵?
可行!而且实现起来非常简单
当然没问题,先帮你算一笔账:你的原始矩阵是2920行,每一行之后插入2行零,总行数就是2920 × (1+2) = 8760行,刚好和你想要的目标矩阵行数完全匹配,完全可行。
这里给你几种MATLAB里高效的实现方法:
方法1:直接初始化零矩阵并填充(推荐,高效直观)
先创建一个8760×640的全零矩阵,然后把原始矩阵的行放到第1、4、7...也就是间隔3行的位置上:
% 假设你的原始矩阵名为A A = rand(2920, 640); % 这里用随机矩阵做示例 B = zeros(3*size(A,1), size(A,2)); % 创建目标大小的零矩阵 B(1:3:end, :) = A; % 将原始矩阵行填充到对应位置
方法2:用克罗内克积(简洁一行)
利用kron函数的特性,把每一行和[1;0;0]做克罗内克积,自动实现“一行加两行零”的效果:
B = kron(A, [1; 0; 0]);
方法3:索引重组(适合理解原理)
先构建重复的索引,再替换对应行为零:
idx = repmat((1:size(A,1))', 3, 1); % 生成重复3次的行索引 B = A(idx, :); % 先复制原始行三次 B(2:3:end, :) = 0; % 把第2、5、8...行设为零 B(3:3:end, :) = 0; % 把第3、6、9...行设为零
这几种方法都能达到你想要的效果,其中方法1的内存和运算效率最高,适合处理大矩阵。
内容的提问来源于stack exchange,提问作者Yoni Verhaegen




