2013-06-20 80 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:很高興能幫到你! –