最近在做煤质数据的空间插值,试用了很多种方法,如距离幂次反比、多项式函数、拟合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) 这段代码实现了对输入数据进行 克里金插值 ,并输出插值结果。