1

我迷失在伟大的 SciPy 提供的所有插值方法中,找不到适合我的情况的最佳方法。

我在矩阵中有数百万个 XYZ 点,这些点在点(单元格)之间具有不同的间隔并且也被旋转。通常大的点数据集介于规则和分散的表示表面之间,我需要将其转换为规则网格以进行进一步分析。

我需要一些快速但要创建尊重点值的光滑表面。在 GIS 软件中,我最喜欢样条函数,但工具运行速度太慢,这就是我转向 SciPy 的地方。线性/德劳内三角测量也是可以接受的,但我更喜欢更平滑的表面。

我尝试过并且非常喜欢 SciPy Rbf,但它以更多的点数而死。也许将文件制动到更小的瓷砖而不是合并回来?

4

1 回答 1

2

到目前为止,我发现的最佳解决方案是通过 matplotlib.mlab 使用带有线性插值的 griddata 来完成。

import matplotlib.mlab as ml
zi = ml.griddata(x,y,z,xi,yi,interp='linear') 

更新: 另外两项改进。我意识到 matplotlib.mlab griddata 与 scipy.interpolate griddata 并不完全相同,第二个更适合我的情况。此外,我的坐标以百万为单位,对于大网格来说,这对精度造成了很大的麻烦(对于底层的 Qhull 库),所以最好将所有坐标移到靠近原点并在计算后移回原点。

from scipy.interpolate import griddata
x -= shift_x
y -= shift_y
zi = griddata((x,y),z,(xi,yi),method='linear')
xi += shift_x
yi += shift_y
于 2014-09-24T01:52:07.220 回答