是否有任何简短的方法可以将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})])
?
在我看来,即使是使用多维数组的简单操作也需要大量的低级命令。
答案 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}
。