N维MatLab Meshgrid

时间:2016-03-05 21:02:45

标签: matlab grid

我知道我可以通过meshgrid到三维空间来做到这一点。

如果我这样做

[X,Y] = meshgrid(1:3,10:14,4:8)

http://www.mathworks.com/help/matlab/ref/meshgrid.html中,然后我将获得三维空间上的网格点。

但是对于n维空间,meshgrid不能这样做。

我应该如何在n维空间(例如n = 64)获得网格点(像meshgrid一样)?

1 个答案:

答案 0 :(得分:4)

要创建n维数据网格,您需要使用ndgrid

[yy,xx,zz,vv] = ndgrid(yrange, xrange, zrange, vrange);

这可以扩展到任意数量的维度。

Daniel所述,请注意前两个输出的命名是相反的,因为y(行)是MATLAB中的第一个维度。

如果你想要真正的高维度(例如64),当输入/输出变得无法管理时,你可以为输入和输出设置单元阵列,并依靠单元阵列扩展来完成工作:

ranges = cell(64, 1);
ranges{1} = xrange;
ranges{2} = yrange;
...
ranges{64} = vals;

outputs = cell(size(ranges);
[outputs{:}] = ndgrid(ranges{:});

作为旁注,随着尺寸数量的增加,这可能会很快爆发。对于您最终想要做的事情,可能会有更优雅的解决方案。

例如,如果我创建示例输入(64维)并且对于每个维度选择1到5之间的随机数作为长度,我得到一个"最大变量大小"错误

ranges = arrayfun(@(x)1:randi([1 5]), 1:64, 'uniform', 0);
[xx,yy] = ndgrid(ranges{:});