我正在尝试在python中执行Fitted Value Iteration(FVI)(包括使用分段线性插值逼近5维函数)。
scipy.interpolate.griddata非常适用于此。但是,我需要将插值程序调用几千次(因为FVI是基于MC的算法)。
所以基本上,函数已知的点集是静态的(并且很大 - 比如32k),但我需要近似的点(这是原始集的小扰动)是非常大的(32k x 5000说)。
scipy.interpolate.griddata是否已将其移植到CUDA? 或者,有没有办法以某种方式加快计算速度?
感谢。
答案 0 :(得分:1)
对于分段线性插值,文档说scipy.interpolate.griddata
使用scipy.interpolate.LinearNDInterpolator
的方法,后者又使用qhull对输入点进行Delaunay tesellation,然后执行标准重心插值,对于每个点,你必须确定每个点在哪个超四面体内,然后使用其barycentric coordinates作为超四面体节点值的插值权重。
可能难以并行化,但您可以使用scipy.spatial.Delaunay
访问CPU版本。其他两个步骤很容易并行化,但我不知道任何可自由实现的实现。
如果您的已知功能点位于常规网格上,则描述here的方法在CUDA中特别容易实现,并且我已经使用了它的实际实现,尽管没有公开可用。
所以我担心你自己不得不做大部分工作......