如何在Python中使用克里格插值台站数据?

如何在Python中使用克里格插值台站数据?,python,kriging,spatial-interpolation,Python,Kriging,Spatial Interpolation,浏览网页时,我发现在Python中使用克里格的一些工具是和。然而,我无法让它们中的任何一个工作。第一个不适用于我(甚至无法导入): 导入pyKriging File "~/python3.6/site-packages/pyKriging/krige.py", line 142 except Exception, err: ^ SyntaxError: invalid syntax 第二个我不知道怎么用。我找不到一个简单的工作示例(例如

浏览网页时,我发现在Python中使用克里格的一些工具是和。然而,我无法让它们中的任何一个工作。第一个不适用于我(甚至无法导入):

导入pyKriging

  File "~/python3.6/site-packages/pyKriging/krige.py", line 142
    except Exception, err: 
                    ^
  SyntaxError: invalid syntax
第二个我不知道怎么用。我找不到一个简单的工作示例(例如,这个示例非常好,但遗憾的是,数据已无法下载)

所以我的问题是,我如何使用克里格插值我的数据?我有几个站点数据保存在numpy阵列中,如下所示:

2000      1         1         5.0
2000      1         2         3.4
2000      1         3         0.2
列为年-月-日-降水量。我有几个这样的数据数组(st1、st2、st3)和另一个数组,其中包含每个站点的ID和每个站点所在的坐标(stid,因此站点1位于经度15.6865、纬度62.6420等)

我需要的是每天一个数组(或一个3D数组),其中包含每天使用克里格插值的所有台站的数据,网格如下:

y = np.arange(61,63,0.125)
x = np.arange(14,17,0.125)
X,Y = np.meshgrid(x,y)

感谢您的帮助

很高兴能找到有趣的文档、软件包等。克里格法通常被称为“高斯过程回归”

在python中,一个有很多示例的好实现是著名的机器学习包之一。它是基于著名的DACE matlab实现的

关于高斯过程回归实现的文档可以在本文及其链接中找到。您可以在此页面底部找到5个教程:。可以找到可用内核的列表

使用您提供的数据,您只需执行以下操作,即可将简单模型与您选择的内核相匹配:

import sklearn
gp = sklearn.gaussian_process.GaussianProcessRegressor(kernel=your_chosen_kernel)
gp.fit(X, y)  
使用
KrigingAlgorithm
估计条件高斯过程的超参数。您需要的元模型的目的是将(经度、纬度)2D点作为输入,将给定日期的降水量作为输出

第一步是准备数据。在下面的脚本中,我创建了包含经度/纬度对的
coordinates\u train
变量和包含降水量的
premission\u train
变量。我使用了2000年1月2日的降水量,因为3号站2000年1月1日的数据缺失

import openturns as ot
# Input points
coordinates_train = ot.Sample([[15.68,62.64],[15.73,62.12],[16.10,61.14]])
# Output points
precipitation_train = ot.Sample([[3.4],[2.5],[4.5]]) # At 2000/1/2
然后我们可以训练克里金法。为了做到这一点,我使用了一个常数基(模型的趋势)和一个指数协方差模型。这应该是适当的,因为相对于车站的位置,降水量必须非常有规律

# Fit
inputDimension = 2
basis = ot.ConstantBasisFactory(inputDimension).build()
covarianceModel = ot.SquaredExponential([1.]*inputDimension, [1.0])
algo = ot.KrigingAlgorithm(coordinates_train, precipitation_train, covarianceModel, basis)
algo.run()
result = algo.getResult()
krigingMetamodel = result.getMetaModel()
然后,我们可以使用元模型来预测未记录位置的降水量。因为
krigingMetamodel
是一个函数,所以我只使用“()”操作符

# Predict
coordinates = [15.70,62.53] # A new latitude/longitude pair
precipitation = krigingMetamodel(coordinates)
然后,
降水量
是包含给定位置降水量的1D点。这是预测的降水量

>>> print(precipitation)
[3.46667]
您还可以通过输入(经度、纬度、时间)来获得更通用的克里格法。在这种情况下,您所要做的就是向输入训练样本添加一个新维度,其中包含相关时间,格式为实值。

语句
gp.fit(X,y)
在这种情况下不合适,因为X是经度的2D数组,y是纬度的1D数组。
>>> print(precipitation)
[3.46667]