在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如何在wix中为TARGETDIR和SourceDir提供路径?   java在custom starter中访问spring应用程序名称   没有构建带有ActionBarSherlock的java Android项目   java按钮边框不显示   JavaSpring:从表单数据获取文件输入流   javascript通知侦听器服务   java在Junit测试时遇到异常   java从文件中读取特定值   JavaFX:在很短的时间内隐藏窗格   如何在Docker中使用用户定义的引用类来容器化Java应用程序?   java如何更改项目的编译SDKversion?   是否有任何java/spring方法可以使用HttpServletRequest存储当前登录用户的会话信息?   Java中的双大于号(>>)?   Java阵列2x2及其工作原理   java Spring引导ddl自动生成器   java如何利用大量数据传输优化服务器客户端应用程序?   java在使用Windows的FLAG_全屏时ICS和Jelly Bean之间的不同行为   java如何获取当前在回收器视图的线性布局中不可见的视图