我知道我可以通过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一样)?
答案 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{:});