我想从向量 xi 创建一个 n 维网格,它指定维度 i 中所需的网格点。输出应该是单个 N x n 矩阵,其中 N=b1*b2*b3*...*bn 是网格点的总数,bi 是沿该维度所需的网格点的数量。 (我想在 Matlab 中执行此操作。)
我知道我可以使用 ndgrid 函数来创建这个 n 维网格,但是 ndgrid 返回 n 个元胞数组,每个维度为 b1xb2xb3x...xbn。如何根据需要将其转换为单个数组?
另一个复杂的情况是:我事先不知道维度 n。
最佳答案
David 在他的评论中已经明白了这个想法,只是 n>=4 的一个小错误。
function grid_array = ndgridarr(n, varargin)
assert(length(varargin) == 1 || length(varargin) == n);
grid_cells = cell(1, n);
[grid_cells{:}] = ndgrid(varargin{:});
grid_array = reshape(cat(n+1,grid_cells{:}),[],n);
end
另一种方法是使用 file exchange 中的 allcomb
或者
combvec
(深度学习工具箱)。它们都已经返回单个矩阵,无需将元胞数组缝合在一起。
关于arrays - 将 ndgrid 的输出转换为单个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60714394/