1

有没有什么捷径可以在不使用循环等变通方法的情况下将d输出堆叠ndgrid(x1,..,xd)到维数组中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})])

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

4

1 回答 1

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}

于 2013-06-20T06:30:14.223 回答