推进插值
笔记;我已经提到了这个问题,因此不需要对Pykrige的特殊知识来回答这个问题!
嗨,我想在我的代码中使用Universal Kriging。为此,我的数据构成如下:
Latitude Longitude Altitude H2 O18 Date Year month dates a_diffO O18a
0 45.320000 -75.670000 114.0 -77.500000 -11.110000 2004-09-15 2004.0 9.0 2004-09-15 -0.228 -10.882000
1 48.828100 9.200000 314.0 -31.350000 -4.880000 2004-09-15 2004.0 9.0 2004-09-15 -0.628 -4.252000
2 51.930000 -10.250000 9.0 -18.800000 -3.160000 2004-09-15 2004.0 9.0 2004-09-15 -0.018 -3.142000
3 48.248611 16.356389 198.0 -45.000000 -6.920000 2004-09-15 2004.0 9.0 2004-09-15 -0.396 -6.524000
4 50.338100 7.600000 85.0 -19.200000 -3.190000 2004-09-15 2004.0 9.0 2004-09-15 -0.170 -3.020000
我想通过通用kriging和使用dlling功能来插入数据(纬度,经度,经度,高度和O18)。
到目前为止,我已经在这里对此进行了编程,但是我没有到达任何地方,例如,我不知道如何有效地将高度用作漂移功能,而来自Pykrige文档的信息有限:
from traceback import print_tb
from typing_extensions import Self
import numpy as np
from pykrige.uk import UniversalKriging
from pykrige.kriging_tools import write_asc_grid
import pykrige.kriging_tools as kt
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Path, PathPatch
import pandas as pd
from osgeo import gdal
def load_data():
df = pd.read_csv(r"File")
return(df)
def get_data(df):
return {
"lons": df['Longitude'],
"lats": df['Latitude'],
"values": df['O18'],
}
def extend_data(data):
return {
"lons": np.concatenate([np.array([lon-360 for lon in data["lons"]]), data["lons"], np.array([lon+360 for lon in data["lons"]])]),
"lats": np.concatenate([data["lats"], data["lats"], data["lats"]]),
"values": np.concatenate([data["values"], data["values"], data["values"]]),
}
def generate_grid(data, basemap, delta=1):
grid = {
'lon': np.arange(-180, 180, delta),
'lat': np.arange(np.amin(data["lats"]), np.amax(data["lats"]), delta)
}
grid["x"], grid["y"] = np.meshgrid(grid["lon"], grid["lat"])
grid["x"], grid["y"] = basemap(grid["x"], grid["y"])
return grid
def interpolate(data, grid):
uk = UniversalKriging(
data["lons"],
data["lats"],
data["values"],
variogram_model='exponential',
verbose=True,
drift_terms=["functional"],
functional_drift=[func],
)
return uk.execute("grid", grid["lon"], grid["lat"])
def prepare_map_plot():
figure, axes = plt.subplots(figsize=(10,10))
basemap = Basemap(projection='robin', lon_0=0, lat_0=0, resolution='h',area_thresh=1000,ax=axes)
return figure, axes, basemap
def plot_mesh_data(interpolation, grid, basemap):
colormesh = basemap.contourf(grid["x"], grid["y"], interpolation,32, cmap='RdBu_r') #plot the data on the map. plt.cm.RdYlBu_r
color_bar = basemap.colorbar(colormesh,location='bottom',pad="10%")
df = load_data()
base_data = get_data(df)
figure, axes, basemap = prepare_map_plot()
grid = generate_grid(base_data, basemap, 90)
extended_data = extend_data(base_data)
interpolation, interpolation_error = interpolate(extended_data, grid)
plot_mesh_data(interpolation, grid,basemap)
plt.show()
我现在只使用Universal Kriging并创建了Universal Kriging这些图像:
我得到了预期错误: value error:必须指定点漂移项的位置和强度。
我只知道我必须创建具有高度的网格,但我不知道如何,我不知道如何使漂移取决于高度。高度公式为:
其中100 m代表100 m的差异。
有趣的是,有一个网站上有示例:但是,我在编码方面缺乏经验,无法理解示例并将其转移到我的示例中: https://python.hotexamples.com/exampleass/core/core/core/calc_cr/calc_cr/python-calc_cr/python-calc_cr-function-examples.html < /a>
结论: 我不知道如何定义[“ external_drift”]做我想做的事情(这是基于我一般没有经验的我)。
我已经尝试解决这些问题已经3周了,但是我真的一无所获。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
From the documentation of pykrige.uk.UniversalKriging (
在您的代码中,您指定不支持的Drift_terms = [“ external_drift”]。对不起,我在此模型中没有专门知识,因此我无法进一步帮助您。但是,这些可能是您需要指定的参数:
From the documentation of pykrige.uk.UniversalKriging (https://geostat-framework.readthedocs.io/projects/pykrige/en/stable/generated/pykrige.uk.UniversalKriging.html#pykrige.uk.UniversalKriging):
In your code you specified drift_terms = ["external_drift"] which is not supported. I'm sorry I don't have specialized knowledge in this model so I cannot help you much further. But it's very likely these are the parameters that you need to specify:
错误的值:必须指定点漂移项的位置和强度。”似乎只有选择“ point_log”为drift_terms才提示
The error 'ValueError: Must specify location(s) and strength(s) of point drift terms.' seems to only prompt if you have chosen 'point_log' as drift_terms