N 维 MatLab 网格

use*_*459 1 grid matlab

我知道我可以通过 3 维空间的网格来做到这一点。

如果我做

[X,Y] = meshgrid(1:3,10:14,4:8)
Run Code Online (Sandbox Code Playgroud)

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

但对于 n 维空间,meshgrid 无法做到这一点。

我应该如何在n维空间(例如n=64)上获得网格点(做类似的事情,如网格网格)?

Sue*_*ver 5

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

[yy,xx,zz,vv] = ndgrid(yrange, xrange, zrange, vrange);
Run Code Online (Sandbox Code Playgroud)

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

正如Daniel所指出的,请注意,前两个输出的命名颠倒了,因为 y(行)是 MATLAB 中的第一个维度。

如果您想要达到非常高的维度(例如 64),当输入/输出变得难以管理时,您可以为输入和输出设置元胞数组,并依靠元胞数组扩展来完成工作:

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

outputs = cell(size(ranges);
[outputs{:}] = ndgrid(ranges{:});
Run Code Online (Sandbox Code Playgroud)

顺便说一句,随着维度数量的增加,这种情况可能会迅速爆发。对于您最终想要做的事情可能有一个更优雅的解决方案。

例如,如果我创建示例输入(64 维)并为每个维度选择 1 到 5 之间的随机数作为长度,我会收到“最大可变大小”错误

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