2013-06-20 74 views
1

堆叠有堆叠的ndgrid(x1,..,xd)d输出到d+1维阵列,而无需使用像周期多维阵列在Matlab

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

检查这个职位。这可能会有所帮助。 http://stackoverflow.com/questions/14770081/create-a-multidimensional-array-in-matlab – vkrams

回答

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}

+0

太棒了!这就是我一直在寻找的。 – xivaxy

+0

@xivaxy:很高兴能帮到你! –