使用具有通用等级的 N-D 插值?
Using N-D interpolation with a generic rank?
我正在寻找一种以更 "general" 的方式使用 ndgrid
和 interpn
的优雅方式 - 基本上是针对任何给定大小的输入,而不是在单独的案例。
给定一个 N-D 源数据,在每个坐标 Mesh={[x1]; [x2]; ...; [xn]}
的一维向量元胞数组中给出匹配的 N-D 网格,并且以相同方式给出 query/output 坐标(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{:});
我正在寻找一种以更 "general" 的方式使用 ndgrid
和 interpn
的优雅方式 - 基本上是针对任何给定大小的输入,而不是在单独的案例。
给定一个 N-D 源数据,在每个坐标 Mesh={[x1]; [x2]; ...; [xn]}
的一维向量元胞数组中给出匹配的 N-D 网格,并且以相同方式给出 query/output 坐标(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{:});