插值重新采样大的不规则矩阵或表面数据点到规则网格

时间:2014-09-23 09:29:25

标签: python scipy interpolation spatial-interpolation

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

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

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

我尝试过并且真的喜欢SciPy Rbf,但是它死了很多点。也许把文件制作成更小的瓷砖而不是合并回来?

1 个答案:

答案 0 :(得分:2)

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

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