一、问题:OrdinaryKriging3D插值出的结果都是均值
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 23 17:47:48 2022
@author: junco
"""
import numpy as np
from pykrige.ok3d import OrdinaryKriging3D
#准备插值的原始数据
lons=[114.82629297477898, 115.0061462015791, 114.83528563611898, 114.79931499075896, 114.844278297459, 115.25794071909925, 115.10506547631915, 115.12305079899916, 115.10506547631915, 115.64462515671948, 115.6536178180595, 114.83528563611898]
lats=[41.31965410512094, 41.32864676646095, 41.35562475048096, 41.364617411820966, 41.418573379861, 41.60741926800112, 41.7333165267612, 41.7333165267612, 41.7423091881012, 41.373610073160975, 41.373610073160975, 41.832235801501255]
depths=[2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 3000, 3000, 3000] #1000m一个深度
values=[51.584, 48.020004, 50.936005, 45.428, 45.428, 54.5, 51.584, 47.372, 45.104004, 49.64, 46.076004, 46.4]
print ("均值:")
print (sum(values)/len(values))
#准备插值后的网格
grid_lon = np.arange(114.7, 115.7, 0.1)
grid_lat = np.arange(41.3, 41.9, 0.1)
grid_depth = np.arange(2000, 3000, 1000) # 1000m一个深度
print(grid_lon)
print(grid_lat)
print(grid_depth)
# 普通克里金3维插值类
ok3d = OrdinaryKriging3D(lons, lats, depths, values, variogram_model='gaussian')
z1, ss1 = ok3d.execute('grid', grid_lon, grid_lat, grid_depth)
#print ("插值后的网格数据形状是:")
#print(z1.shape) #插值后的网格数据形状是
#print ("插值后的网格数据:")
#print(z1.data) #插值后的网格数据
print ("插值后的数据最大值:")
print(np.max(z1.data))
print ("插值后的数据最小值:")
print(np.min(z1.data))
插值结果如下:
均值:
48.5060014167
[ 114.7 114.8 114.9 115. 115.1 115.2 115.3 115.4 115.5 115.6
115.7]
[ 41.3 41.4 41.5 41.6 41.7 41.8 41.9]
[ 2000. 3000.]
插值后的数据最大值:
48.5060014167
插值后的数据最小值:
48.5060014167
得到的结果都是48.5060014167,为原始值的均值。
二、解决:经过排查,是插值后的网格点离输入的原始点太远。改下代码将插值后的网格点包含输入的原始点,结果显示不再全部为原始值的均值。
修改后的代码如下:
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 23 17:47:48 2022
@author: junco
"""
import numpy as np
from pykrige.ok3d import OrdinaryKriging3D
#准备插值的原始数据
lons=[114.82629297477898, 115.0061462015791, 114.83528563611898, 114.79931499075896, 114.844278297459, 115.25794071909925, 115.10506547631915, 115.12305079899916, 115.10506547631915, 115.64462515671948, 115.6536178180595, 114.83528563611898]
lats=[41.31965410512094, 41.32864676646095, 41.35562475048096, 41.364617411820966, 41.418573379861, 41.60741926800112, 41.7333165267612, 41.7333165267612, 41.7423091881012, 41.373610073160975, 41.373610073160975, 41.832235801501255]
depths=[2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 3000, 3000, 3000] #1000m一个深度
values=[51.584, 48.020004, 50.936005, 45.428, 45.428, 54.5, 51.584, 47.372, 45.104004, 49.64, 46.076004, 46.4]
print ("均值:")
print (sum(values)/len(values))
#准备插值后的网格
grid_lon = np.arange(114.79931499075896, 115.6536178180595, 0.008992661340005603)
grid_lat = np.arange(41.31965410512094, 41.832235801501255, 0.008992661340005603)
grid_depth = np.arange(2000, 3000, 1000) # 1000m一个深度
print(grid_lon)
print(grid_lat)
print(grid_depth)
# 普通克里金3维插值类
ok3d = OrdinaryKriging3D(lons, lats, depths, values, variogram_model='gaussian')
z1, ss1 = ok3d.execute('grid', grid_lon, grid_lat, grid_depth)
#print ("插值后的网格数据形状是:")
#print(z1.shape) #插值后的网格数据形状是
#print ("插值后的网格数据:")
#print(z1.data) #插值后的网格数据
print ("插值后的数据最大值:")
print(np.max(z1.data))
print ("插值后的数据最小值:")
print(np.min(z1.data))
修改后的代码插值结果如下:
均值:
48.5060014167
[ 114.7 114.8 114.9 115. 115.1 115.2 115.3 115.4 115.5 115.6
115.7]
[ 41.3 41.4 41.5 41.6 41.7 41.8 41.9]
[ 2000. 3000.]
插值后的数据最大值:
48.5060014167
插值后的数据最小值:
48.5060014167
runfile('C:/Users/admin/Desktop/nc/untitled0.py', wdir='C:/Users/admin/Desktop/nc')
均值:
48.5060014167
[ 114.79931499 114.80830765 114.81730031 114.82629297 114.83528564
114.8442783 114.85327096 114.86226362 114.87125628 114.88024894
114.8892416 114.89823427 114.90722693 114.91621959 114.92521225
114.93420491 114.94319757 114.95219023 114.96118289 114.97017556
114.97916822 114.98816088 114.99715354 115.0061462 115.01513886
115.02413152 115.03312419 115.04211685 115.05110951 115.06010217
115.06909483 115.07808749 115.08708015 115.09607281 115.10506548
115.11405814 115.1230508 115.13204346 115.14103612 115.15002878
115.15902144 115.16801411 115.17700677 115.18599943 115.19499209
115.20398475 115.21297741 115.22197007 115.23096274 115.2399554
115.24894806 115.25794072 115.26693338 115.27592604 115.2849187
115.29391136 115.30290403 115.31189669 115.32088935 115.32988201
115.33887467 115.34786733 115.35685999 115.36585266 115.37484532
115.38383798 115.39283064 115.4018233 115.41081596 115.41980862
115.42880128 115.43779395 115.44678661 115.45577927 115.46477193
115.47376459 115.48275725 115.49174991 115.50074258 115.50973524
115.5187279 115.52772056 115.53671322 115.54570588 115.55469854
115.5636912 115.57268387 115.58167653 115.59066919 115.59966185
115.60865451 115.61764717 115.62663983 115.6356325 115.64462516
115.65361782]
[ 41.31965411 41.32864677 41.33763943 41.34663209 41.35562475
41.36461741 41.37361007 41.38260273 41.3915954 41.40058806
41.40958072 41.41857338 41.42756604 41.4365587 41.44555136
41.45454403 41.46353669 41.47252935 41.48152201 41.49051467
41.49950733 41.50849999 41.51749265 41.52648532 41.53547798
41.54447064 41.5534633 41.56245596 41.57144862 41.58044128
41.58943395 41.59842661 41.60741927 41.61641193 41.62540459
41.63439725 41.64338991 41.65238257 41.66137524 41.6703679
41.67936056 41.68835322 41.69734588 41.70633854 41.7153312
41.72432387 41.73331653 41.74230919 41.75130185 41.76029451
41.76928717 41.77827983 41.78727249 41.79626516 41.80525782
41.81425048 41.82324314]
[2000]
插值后的数据最大值:
54.5
插值后的数据最小值:
45.104004