最近在做煤质数据的空间插值,试用了很多种方法,如距离幂次反比、多项式函数、拟合1/2/3次函数的最小二乘、加权最小二乘以及移动曲面拟合,插值出来的效果呀,千奇百怪的,除了距离幂次反比像一点点那么回事儿,其他的........啧啧啧...........。无奈之下重新找克里金开源程序,尝试能获得个好点的效果。今天看了看PyKrige的Demo感觉还不多,于是打算睡前写一小段,分享和记录下,并且准备开个系列,以后研究研究这个库.......
PyKrige
Purpose
代码支持2D和3D普通和通用克里格。内置标准变异函数模型(线性、幂次、球面、高斯、指数),但也可以使用自定义变异函数模型。2D通用克立格码目前支持区域线性、点对数和外部漂移项,而3D通用克立格码支持所有三维空间的区域线性漂移项。通用版立格类也支持泛型“指定”和“功能”漂移能力。使用“指定”漂移功能,用户可以手动指定每个数据点和所有网格点上的漂移值。有了“功能”漂移能力,用户可以提供定义漂移的空间坐标的可调用函数。这个包包含一个模块,其中包含处理ASCII网格文件(*.asc)时非常有用的函数。
Installation
安装可以直接通过pip进行安装,要求Python版本3.5+
pip install pykrige
github源码地址:
https://github.com/GeoStat-Framework/PyKrige
官网地址:
https://geostat-framework.readthedocs.io/projects/pykrige/en/stable/examples/index.html
Github上小例子
"""Ordinary Kriging Example========================First we will create a 2D dataset together with the associated x, y grids."""import numpy as npimport pykrige.kriging_tools as ktfrom pykrige.ok import OrdinaryKrigingimport matplotlib.pyplot as pltdata = np.array( [ [0.3, 1.2, 0.47], [1.9, 0.6, 0.56], [1.1, 3.2, 0.74], [3.3, 4.4, 1.47], [4.7, 3.8, 1.74], ])gridx = np.arange(0.0, 5.5, 0.5)gridy = np.arange(0.0, 5.5, 0.5)################################################################################ Create the ordinary kriging object. Required inputs are the X-coordinates of# the data points, the Y-coordinates of the data points, and the Z-values of the# data points. If no variogram model is specified, defaults to a linear variogram# model. If no variogram model parameters are specified, then the code automatically# calculates the parameters by fitting the variogram model to the binned# experimental semivariogram. The verbose kwarg controls code talk-back, and# the enable_plotting kwarg controls the display of the semivariogram.OK = OrdinaryKriging( data[:, 0], data[:, 1], data[:, 2], variogram_model="linear", verbose=False, enable_plotting=False,)################################################################################ Creates the kriged grid and the variance grid. Allows for kriging on a rectangular# grid of points, on a masked rectangular grid of points, or with arbitrary points.# (See OrdinaryKriging.__doc__ for more information.)z, ss = OK.execute("grid", gridx, gridy)################################################################################ Writes the kriged grid to an ASCII grid file and plot it.kt.write_asc_grid(gridx, gridy, z, filename="output.asc")plt.imshow(z)plt.show()
2D格网插值效果
普通克里金2D插值效果演示:
格网估计值如下:
前言最近在做煤质数据的空间插值,试用了很多种方法,如距离幂次反比、多项式函数、拟合1/2/3次函数的最小二乘、加权最小二乘以及移动曲面拟合,插值出来的效果呀,千奇百怪的,除了距离幂次反比像一点点那么回事儿,其他的........啧啧啧...........。无奈之下重新找克里金开源程序,尝试能获得个好点的效果。今天看了看PyKrige的Demo感觉还不多,于是打算睡前写一小段,分享和记录...
适用于
Python
的
Kri
gin
g工具包。
该代码支持2D和3D普通和通用克里金法。 内置了标准变异函数模型(线性,幂,球面,高斯,指数),但也可以使用自定义变异函数模型。 2D通用克里金代码当前支持区域线性,对数对数和外部漂移项,而3D通用克里金代码在所有三个空间维度上都支持区域线性漂移项。 两种通用克里金法也都支持通用的“指定”和“功能”漂移功能。 使用“指定的”漂移功能,用户可以手动指定每个数据点和所有网格点的漂移值。 借助“功能性”漂移功能,用户可以提供定义漂移的空间坐标的可调用函数。 该软件包包括一个模块,该模块包含的功能对于使用ASCII网格文件( \*.asc )应该有用。
有关更多详细信息和示例,请参见的文档。
Py
Kri
ge需要
Python
3.5以上版本以及numpy,scipy。 可以通过以下方式从PyPi安装:
pip install p
其中γ(h) 是已知点 xi 和 xj 的半变异,***h***表示这两个点之间的距离,z是属性值。
假设不存在漂移,普通克里金法重点考虑空间相关因素,并用拟合的半变异直接进行插值。
估算某测量点z值的通用方程为:
式中,z0是待估计值,zx是已知点x的值,Wx是每个已知点关联的权重,s是用于估计的已知点数目。
权重可以由一组矩阵方程得到。
其中γ(h) 是已知点 xi 和 xj 的半变异,***h***表示这两个点之间的距离,z是属性值。
假设不存在漂移,普通克里金法重点考虑空间相关因素,并用拟合的半变异直接进行插值。
估算某测量点z值的通用方程为:
式中,z0是待估计值,...
x = np.array([, 1, 2, 3, 4, 5])
y = np.array([, 1, 2, 3, 4, 5])
z = np.array([, .5, 2, 4, 3.5, 1])
# 创建 Rbf 对象
rbf = Rbf(x, y, z, function='linear')
xi = np.linspace(, 5, 11)
yi = np.linspace(, 5, 11)
XI, YI = np.meshgrid(xi, yi)
zi = rbf(XI, YI)
# 输出结果
print(zi)
这段代码实现了对输入数据进行
克里金插值
,并输出插值结果。