一、问题: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