Matlab中的多维数组堆栈

时间:2013-06-20 01:21:58

标签: matlab multidimensional-array

是否有任何简短的方法可以将d ndgrid(x1,..,xd)的{​​{1}}输出堆叠到d+1 - 维数组中,而不使用像周期这样的解决方法

cgrid=cell(1,d);
[cgrid{:}]=ndgrid(x1, x2, ... , xd);
agrid=zeros([d, size(cgrid{1})]);
for jj=1:d
    agrid(jj,:)=reshape(cgrid{jj},size(agrid(jj,:)));
end

agrid=reshape(cell2mat(cellfun(@(c) c{:},cgrid)),[d, size(cgrid{1})])

在我看来,即使是使用多维数组的简单操作也需要大量的低级命令。

1 个答案:

答案 0 :(得分:1)

您可以使用cat执行此操作:

buffer = cell(1, 3);
[buffer{:}] = ndgrid(1:10, 1:10, 1:10);
stacked = cat(length(buffer + 1), buffer{:});

请注意,这与您发布的代码并不完全相同,因为在此版本中,新索引位于最后一个维度(因此stacked(:, :, :, i)buffer{i})。您可以使用shiftdim来移动尺寸:

shifted = shiftdim(stacked, ndims(stacked) - 1);

然后squeeze(shifted(i, :, :, :))等于buffer{i}