OrdinaryKriging3D插值出的结果都是均值问题查找

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值