8

我正在尝试在 python 中执行拟合值迭代(FVI)(涉及使用分段线性插值逼近 5 维函数)。

scipy.interpolate.griddata 非常适合这个。但是,我需要调用插值程序几千次(因为 FVI 是基于 MC 的算法)。

所以基本上,已知函数的点集是静态的(并且很大 - 比如说 32k),但是我需要近似的点(它们是原始集的小扰动)非常大(比如 32k x 5000)。

是否有已移植到 CUDA 的 scipy.interpolate.griddata 的实现?或者,有没有办法以某种方式加快计算速度?

谢谢。

4

1 回答 1

1

对于分段线性插值,文档说scipy.interpolate.griddata使用 的方法scipy.interpolate.LinearNDInterpolator,然后使用qhull对输入点进行 Delaunay 细分,然后执行标准的重心插值,对于每个点,您必须确定每个点在哪个超四面体内部是,然后使用其重心坐标作为超四面体节点值的插值权重。

曲面细分可能很难并行化,但您可以使用scipy.spatial.Delaunay. 其他两个步骤很容易并行化,尽管我不知道有任何免费可用的实现。

如果您的已知功能点位于常规网格上,则此处描述的方法在 CUDA 中特别容易实现,并且我已经使用它的实际实现,尽管没有公开可用。

所以恐怕你将不得不自己完成大部分工作......

于 2012-12-28T16:26:02.353 回答