Matlab中如何用二维数组快速初始化三维数组?
高效创建重复二维切片的三维数组
你用循环初始化三维数组的方法速度慢,是因为MATLAB的解释型循环开销很高。这里有几种向量化的高效方法可以替代:
你的原实现代码:
a = rand(1000); b = zeros(1000, 1000, 1000); for i = 1:1000 b(:,:,i) = a; end
方法1:使用repmat函数(最直观)
repmat是MATLAB专门用来重复构造数组的函数,内部做了底层优化,速度远快于手动循环:
a = rand(1000); b = repmat(a, [1 1 1000]); % 前两个维度保留原大小,第三个维度重复1000次
方法2:利用数组广播机制(简洁高效)
通过扩展二维数组的维度触发MATLAB的广播复制逻辑,无需额外工具函数:
a = rand(1000); b = a(:,:,ones(1,1000)); % 扩展第三维度为1000个元素,自动复制a到每个切片
在R2016b及以上版本,还可以用repelem函数实现更直观的维度重复控制:
b = repelem(a, 1, 1, 1000); % 依次指定三个维度的重复次数
方法3:使用克罗内克积kron
通过kron将二维数组与三维单位数组结合,快速生成目标数组:
a = rand(1000); b = kron(ones(1,1,1000), a);
这些方法的执行效率都远高于循环,其中repmat和广播的方法在大多数场景下表现最优。
内容的提问来源于stack exchange,提问作者user728826
相关产品推荐
相关产品推荐

