数据克隆成 3D 矩阵

计算科学 matlab 矩阵 3d
2021-12-12 10:23:29

我正在使用 MATLAB,我会遇到以下问题。我有以下随机数矩阵,rand(200,200) 我需要创建一个具有以下结构的 3D 矩阵,3D_mat(r,s,p)具有 15 层 ( p=15),其中每一层都将包含给定的数据rand(200,200)也许,这很容易,但我是 MATLAB 初学者。

2个回答

这可能不是在 MATLAB 中执行此操作的最有效方法,但以下在 Octave 中对我有用:

A=rand(200,200);
for i=1:15
  B(:,:,i)=A;
end

而且,我认为它在 MATLAB 中也应该可以正常工作。如果您的尺寸变得更大,或者您必须经常创建 3D 矩阵,则可能有更有效的方法来完成此操作。

这里有三个选项: with repmator bsxfun,@Christian Clason 唤起的两个函数。在某些版本的 Matlab 上(特别是早于 2013 年,从https://stackoverflow.com/questions/16746999/most-efficient-way-for-repeating-a-vector-in-matlab可以看出),bsxfun速度更快,如果不是这样,被认为使用更少的内存(如果你得到比200×200×15)。最后一个玩索引。

nRow = 200;
nCol = 200;
nDep = 15;

r = rand(nRow,nCol);
o = zeros(nRow,nCol,nDep); % Not bad to initialize

% Choose one
o = repmat(r,1,1,nDep); % repmat version
o = bsxfun(@times,ones(1, 1 , nDep),r); % bsxfun version
o = r(:,:,ones(1, 1 , nDep)); % multiple-indexing version

就我而言(Matlab2013b),repmat 是2/3对于几个矩阵大小和重复深度(包括你的),比其他两个更快。根据一些证词,由于repmatMatlab2013b 及更高版本中存在新的编码,bsxfun确实可以更慢。