我正在寻找一种以更“通用”的方式使用ndgrid
和interpn
的优雅方法-基本上是针对任何给定的输入大小,而不是在单独的情况下对待每个等级。 / p>
给出具有匹配的ND网格的ND源数据,该ND网格在1D向量的像元数组中为每个坐标Mesh={[x1]; [x2]; ...; [xn]}
和以相同方式给出的查询/输出坐标(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
答案 0 :(得分:1)
我认为您正在寻找的是如何从此行获取多个输出:
OutGrid = ndgrid(QueryMesh{:});
由于ndgrid
产生的输出数组与其接收的输入数组一样多,因此您可以通过以下方式创建一个空单元格数组:
OutGrid = cell(size(QueryMesh));
接下来,证明OutGrid
的每个元素作为输出参数:
[OutGrid{:}] = ndgrid(QueryMesh{:});