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



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

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

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

我试过,真的很喜欢SciPy-Rbf,但它会随着点数的增加而消亡。也许把文件压缩到更小的瓦片上,然后再合并回来?

到目前为止,我找到的最好的解决方案是通过matplotlib.mlab使用带线性插值的网格数据。

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

更新:另外两项改进。我意识到matplotlib.mlab网格数据与scipy.interpolate网格数据并不完全相同,第二个网格数据对我的情况更好。此外,我的坐标是以百万为单位的,对于大网格来说,这会给presicision(对于底层的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

相关内容

最新更新