我正在寻找一种优雅的方式来以更"通用"的方式使用ndgrid
和interpn
- 基本上对于任何给定的输入大小,而不是在单独的情况下处理每个等级。
给定一个 N-D 源数据,其中每个坐标Mesh={[x1]; [x2]; ...; [xn]}
的一维向量单元数组中给出匹配的 N-D 网格,并以相同的方式(QueryMesh
(给出查询/输出坐标,如何生成ndgrid
矩阵并在interpn
中使用它们而不为每个维度设置案例?
此外,如果有更好的方法来定义网格 - 我非常愿意改变。
这是一个非常明显的,概念性的(并且不起作用的(示意图,如果不清楚的话,我想得到什么
Mesh={linspace(0,1,10); linspace(0,4,20); ... linsapce(0,10,15)};
QueryMesh={linspace(0,1,20); linspace(0,4,40); ... linsapce(0,10,30)};
Data=... (whatever)
NewData=InterpolateGeneric(Mesh,QueryMesh,Data);
function NewData=InterpolateGeneric(Mesh,QueryMesh,Data)
InGrid=ndgrid(Mesh{:});
OutGrid=ndgrid(QueryMesh{:});
NewData=interpn(InGrid{:},Data,OutGrid{:},'linear',0.0)
end
我认为您正在寻找的是如何从此行获取多个输出:
OutGrid = ndgrid(QueryMesh{:});
由于ndgrid
生成的输出数组与它接收的输入数组一样多,因此您可以通过以下方式创建一个空单元数组:
OutGrid = cell(size(QueryMesh));
接下来,证明OutGrid
的每个元素作为输出参数:
[OutGrid{:}] = ndgrid(QueryMesh{:});