【问题标题】:Kriging in PythonPython 中的克里金法
【发布时间】:2020-11-15 16:46:01
【问题描述】:

我已经使用 pykrige 进行插值 2d。

一些数据(x,y,z),即位置和海拔。

但是在普通克里金法('球形')上结果并不好。

如何调整参数以获得更好的结果。

或者对python中的克里金算法有什么建议?

n = int(input("Enter the Slice number:"))
x = df_Points[n]['x']
y = df_Points[n]['y']
z = df_Points[n]['z']

gridx = np.arange(min(x) - 100, max(x) + 100, 10.0)
gridy = np.arange(min(y) - 100, max(y) + 100, 10.0)

# OrdinaryKriging
from pykrige.ok import OrdinaryKriging
# ordinary kriging with pykrige
OK = OrdinaryKriging(
    x,
    y,
    z,
    variogram_model='spherical')

z1, ss1 = OK.execute("grid", gridx, gridy)

【问题讨论】:

  • “不好”是比较级形容词。与什么“结果不好”相比?例如,ArcGIS 克里金法是否会产生更好的结果? PyKrige 项目页面上有很多示例,因此请尝试不同版本的克里金算法,看看哪种效果更好。
  • 这个问题对于给定的n 值会更有用,而不是从用户那里读到这个(这个来自用户的事实并不相关)。我建议还添加一组给定的z 值,以便提供一致的答案。我猜您在脚本开头省略了导入 pandas:添加此导入可以更轻松地重现脚本。

标签: python interpolation kriging


【解决方案1】:

我不太了解pykrige。在OpenTURNS库中我使用的参数优化是自动完成的。

在您的情况下,您有一个包含 x、y 和 z 的 Pandas 数据框“df_Points”。如果我理解得很好,你想要一个元模型:(x,y) -> z

import openturns as ot

# your input / output data can be easily formatted as samples for openturns
inputdata = ot.Sample(df[['x','y']].values)
outputdata = ot.Sample(df[['z']].values)

那你可以试试球面克里金法。

dimension = 2  # dimension of your input (x,y)
basis = ot.ConstantBasisFactory(dimension).build()
covarianceModel = ot.SphericalModel(dimension)
    
algo = ot.KrigingAlgorithm(inputdata, outputdata, covarianceModel, basis)
algo.run()
result = algo.getResult()
metamodel = result.getMetaModel()

元模型是您正在寻找的。您可以在特定点执行它

metamodel([x0, y0])

或在整个网格网格上。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2015-08-09
    • 2013-11-24
    • 2018-08-09
    • 2018-10-27
    • 2015-01-26
    • 2021-09-15
    • 2019-02-23
    • 2015-12-03
    相关资源
    最近更新 更多