问题: 在Python中,对于点位置,计算反向距离加权(IDW)插值的最佳方法是什么?
一些背景: 目前我正在使用RPy2与R及其gstat模块接口。不幸的是,gstat模块与arcgisscripting冲突,我通过在一个单独的进程中运行基于RPy2的分析解决了这个问题。即使这个问题在最近/将来的版本中得到了解决,并且效率可以提高,我仍然希望消除对安装R的依赖
gstat网站确实提供了一个独立的可执行文件,它更容易与我的python脚本打包,但我仍然希望有一个python解决方案,它不需要多次写入磁盘和启动外部进程。在我正在执行的处理过程中,对插值函数的调用次数(点和值的单独集合)可以接近20000次。
我特别需要对点进行插值,所以在性能方面,使用ArcGIS中的IDW函数生成raster的效果甚至比使用R更差……除非有一种方法可以有效地屏蔽掉我所需要的点。即使有了这个修改,我也不会期望性能会那么好。我将把这个选择作为另一个选择。更新:这里的问题是你被绑定到你正在使用的单元格大小。如果减小单元大小以获得更好的精度,则处理需要很长时间。如果您想要特定点的值,您还需要通过逐点提取……来跟踪整个丑陋的方法。
我已经看了scipy documentation,但是看起来没有一个直接的方法来计算IDW。
我正在考虑滚动我自己的实现,可能使用一些scipy功能来定位最近的点并计算距离。
我是不是漏掉了一些显而易见的东西?有没有一个python模块我还没有看到,它正是我想要的?在scipy的帮助下创建自己的实现是一个明智的选择吗?
10月20日更改:该类Invdisttree结合了反向距离加权和 scipy.spatial.KDTree.
忘了原来的蛮力答案; 这是离散数据插值的一种选择方法。
编辑:@Denis是对的,线性Rbf(例如scipy.interpolate.Rbf具有“function=”线性“)与IDW不同。。。
(注意,如果使用大量的点,所有这些都会占用过多的内存!)
以下是IDW的一个简单示例:
然而,线性径向基函数是这样的:
(此处使用距离矩阵函数:)
将它们组合在一个不错的复制粘贴示例中,可以生成一些快速比较图:
(来源:jkington at www.geology.wisc.edu)
(来源:jkington at www.geology.wisc.edu)
(来源:jkington at www.geology.wisc.edu)
相关问题 更多 >
编程相关推荐