在CPU上快速、离散的三维自然邻域插值。
naturalneighbor的Python项目详细描述
离散sibson(自然邻域)插值
自然邻域插值是一种对离散数据进行插值的方法 (也就是说,你知道函数在分散位置的值)。它通常优于线性重心插值,这是scipy的griddata函数提供的一种常用插值方法。
python中有几种2d自然邻域插值的实现。我们需要一个可以在没有gpu的情况下运行的快速3d实现,因此我们编写了一个离散sibson插值的实现(一个自然邻域插值的版本,与“几何”自然邻域插值相比,它速度很快,但引入的误差很小)。
有关详细信息,请参见https://doi.org/10.1109/TVCG.2006.27。
依赖性
- python 2.7或3.4+
- numpy(已使用1.13+)进行测试
演示
对于平滑变化的函数,自然邻域插值比线性重心插值(scipy的默认值)更精确。
而且,最终的结果看起来更好。
注意,自然邻域值通常是外推的;它们在演示中被截断,以便与scipy的线性重心法(不外推)进行比较。
使用量
此模块公开单个函数griddata
。
naturalneighbor.griddata
的api类似于
scipy.interpolate.griddata
。与scipy不同,第三个参数不是
密集的mgrid,但它只是传递给mgrid
的范围。这是因为离散sibson方法要求插值点位于均匀间隔的网格上。
importscipy.interpolateimportnumpyasnpimportnaturalneighbornum_points=10num_dimensions=3points=np.random.rand(num_points,num_dimensions)values=np.random.rand(num_points)grids=tuple(np.mgrid[0:100:1,0:50:100j,0:100:2])scipy_interpolated_values=scipy.interpolate.griddata(points,values,grids)grid_ranges=[[0,100,1],[0,50,100j],[0,100,2]]nn_interpolated_values=naturalneighbor.griddata(points,values,grid_ranges)
未来工作
- 提供外推处理选项
- 支持浮点数和复数(目前只支持双倍)
- 支持二维(仅支持三维)
- 添加文档,讨论离散sibson方法的局限性
- 从To.I.In和C++代码 中取消CPPLIN注释
- 泛化线程模型(当前它使用8个线程,每个象限一个)