在CPU上快速、离散的三维自然邻域插值。

naturalneighbor的Python项目详细描述


https://travis-ci.org/innolitics/natural-neighbor-interpolation.svg?branch=master

离散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的默认值)更精确。

而且,最终的结果看起来更好。

https://raw.githubusercontent.com/innolitics/natural-neighbor-interpolation/master/demo/linear_comparison.pnghttps://raw.githubusercontent.com/innolitics/natural-neighbor-interpolation/master/demo/sin_sin_comparison.png

注意,自然邻域值通常是外推的;它们在演示中被截断,以便与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个线程,每个象限一个)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
连接Java Rest服务   为每个不工作的循环更改数组值   java如何在删除某个元素后重新绘制GUI?   java混淆了共享maven模块?   Java在2d数组中计算重复数   未从TomCat上的Jar文件加载java类   JavaFX SceneBuilder中的java每月概览   java对于参数类型double,Point2D,运算符*未定义。双重的   java错误:类AcceptedFriendAction中的构造函数AcceptedFriendAction无法应用于给定类型;   eclipse java如何限制文本字段?   java无法执行目标组织。阿帕奇。专家插件:mavencompilerplugin:3.8.1:编译   macos Java无法启动jar文件   spring java代理向上游应用程序传递请求   java如何解决:错误:任务“:app:kaptDebugKotlin”的执行失败?   java在构造函数中完成类的主要工作时有什么问题吗?