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


    一、问题:OrdinaryKriging3D插值出的结果都是均值
    代码如下:

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Wed Nov 23 17:47:48 2022
    4. @author: junco
    5. """
    6. import numpy as np
    7. from pykrige.ok3d import OrdinaryKriging3D
    8. #准备插值的原始数据
    9. 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]
    10. 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]
    11. depths=[2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 3000, 3000, 3000] #1000m一个深度
    12. 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]
    13. print ("均值:")
    14. print (sum(values)/len(values))
    15. #准备插值后的网格
    16. grid_lon = np.arange(114.7, 115.7, 0.1)
    17. grid_lat = np.arange(41.3, 41.9, 0.1)
    18. grid_depth = np.arange(2000, 3000, 1000) # 1000m一个深度
    19. print(grid_lon)
    20. print(grid_lat)
    21. print(grid_depth)
    22. # 普通克里金3维插值类
    23. ok3d = OrdinaryKriging3D(lons, lats, depths, values, variogram_model='gaussian')
    24. z1, ss1 = ok3d.execute('grid', grid_lon, grid_lat, grid_depth)
    25. #print ("插值后的网格数据形状是:")
    26. #print(z1.shape) #插值后的网格数据形状是
    27. #print ("插值后的网格数据:")
    28. #print(z1.data) #插值后的网格数据
    29. print ("插值后的数据最大值:")
    30. print(np.max(z1.data))
    31. print ("插值后的数据最小值:")
    32. print(np.min(z1.data))

    插值结果如下:

    1. 均值:
    2. 48.5060014167
    3. [ 114.7 114.8 114.9 115. 115.1 115.2 115.3 115.4 115.5 115.6
    4. 115.7]
    5. [ 41.3 41.4 41.5 41.6 41.7 41.8 41.9]
    6. [ 2000. 3000.]
    7. 插值后的数据最大值:
    8. 48.5060014167
    9. 插值后的数据最小值:
    10. 48.5060014167

    得到的结果都是48.5060014167,为原始值的均值。
    二、解决:经过排查,是插值后的网格点离输入的原始点太远。改下代码将插值后的网格点包含输入的原始点,结果显示不再全部为原始值的均值。
    修改后的代码如下:

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Wed Nov 23 17:47:48 2022
    4. @author: junco
    5. """
    6. import numpy as np
    7. from pykrige.ok3d import OrdinaryKriging3D
    8. #准备插值的原始数据
    9. 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]
    10. 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]
    11. depths=[2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 3000, 3000, 3000] #1000m一个深度
    12. 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]
    13. print ("均值:")
    14. print (sum(values)/len(values))
    15. #准备插值后的网格
    16. grid_lon = np.arange(114.79931499075896, 115.6536178180595, 0.008992661340005603)
    17. grid_lat = np.arange(41.31965410512094, 41.832235801501255, 0.008992661340005603)
    18. grid_depth = np.arange(2000, 3000, 1000) # 1000m一个深度
    19. print(grid_lon)
    20. print(grid_lat)
    21. print(grid_depth)
    22. # 普通克里金3维插值类
    23. ok3d = OrdinaryKriging3D(lons, lats, depths, values, variogram_model='gaussian')
    24. z1, ss1 = ok3d.execute('grid', grid_lon, grid_lat, grid_depth)
    25. #print ("插值后的网格数据形状是:")
    26. #print(z1.shape) #插值后的网格数据形状是
    27. #print ("插值后的网格数据:")
    28. #print(z1.data) #插值后的网格数据
    29. print ("插值后的数据最大值:")
    30. print(np.max(z1.data))
    31. print ("插值后的数据最小值:")
    32. print(np.min(z1.data))


    修改后的代码插值结果如下:

    1. 均值:
    2. 48.5060014167
    3. [ 114.7 114.8 114.9 115. 115.1 115.2 115.3 115.4 115.5 115.6
    4. 115.7]
    5. [ 41.3 41.4 41.5 41.6 41.7 41.8 41.9]
    6. [ 2000. 3000.]
    7. 插值后的数据最大值:
    8. 48.5060014167
    9. 插值后的数据最小值:
    10. 48.5060014167
    11. runfile('C:/Users/admin/Desktop/nc/untitled0.py', wdir='C:/Users/admin/Desktop/nc')
    12. 均值:
    13. 48.5060014167
    14. [ 114.79931499 114.80830765 114.81730031 114.82629297 114.83528564
    15. 114.8442783 114.85327096 114.86226362 114.87125628 114.88024894
    16. 114.8892416 114.89823427 114.90722693 114.91621959 114.92521225
    17. 114.93420491 114.94319757 114.95219023 114.96118289 114.97017556
    18. 114.97916822 114.98816088 114.99715354 115.0061462 115.01513886
    19. 115.02413152 115.03312419 115.04211685 115.05110951 115.06010217
    20. 115.06909483 115.07808749 115.08708015 115.09607281 115.10506548
    21. 115.11405814 115.1230508 115.13204346 115.14103612 115.15002878
    22. 115.15902144 115.16801411 115.17700677 115.18599943 115.19499209
    23. 115.20398475 115.21297741 115.22197007 115.23096274 115.2399554
    24. 115.24894806 115.25794072 115.26693338 115.27592604 115.2849187
    25. 115.29391136 115.30290403 115.31189669 115.32088935 115.32988201
    26. 115.33887467 115.34786733 115.35685999 115.36585266 115.37484532
    27. 115.38383798 115.39283064 115.4018233 115.41081596 115.41980862
    28. 115.42880128 115.43779395 115.44678661 115.45577927 115.46477193
    29. 115.47376459 115.48275725 115.49174991 115.50074258 115.50973524
    30. 115.5187279 115.52772056 115.53671322 115.54570588 115.55469854
    31. 115.5636912 115.57268387 115.58167653 115.59066919 115.59966185
    32. 115.60865451 115.61764717 115.62663983 115.6356325 115.64462516
    33. 115.65361782]
    34. [ 41.31965411 41.32864677 41.33763943 41.34663209 41.35562475
    35. 41.36461741 41.37361007 41.38260273 41.3915954 41.40058806
    36. 41.40958072 41.41857338 41.42756604 41.4365587 41.44555136
    37. 41.45454403 41.46353669 41.47252935 41.48152201 41.49051467
    38. 41.49950733 41.50849999 41.51749265 41.52648532 41.53547798
    39. 41.54447064 41.5534633 41.56245596 41.57144862 41.58044128
    40. 41.58943395 41.59842661 41.60741927 41.61641193 41.62540459
    41. 41.63439725 41.64338991 41.65238257 41.66137524 41.6703679
    42. 41.67936056 41.68835322 41.69734588 41.70633854 41.7153312
    43. 41.72432387 41.73331653 41.74230919 41.75130185 41.76029451
    44. 41.76928717 41.77827983 41.78727249 41.79626516 41.80525782
    45. 41.81425048 41.82324314]
    46. [2000]
    47. 插值后的数据最大值:
    48. 54.5
    49. 插值后的数据最小值:
    50. 45.104004

  • 相关阅读:
    C#:实现字符串转整形算法(附完整源码)
    基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理
    如何使用Python快速实现文件共享并通过内网穿透技术公网访问?
    [极致用户体验] 你的 Link Button 能让用户选择新页面打开吗?
    Dijkstra、A*算法python实现及对比分析
    微信小程序登录后端
    『外卖好评(通用50字)』
    下一个行业风口:NFT 数字藏品,是机遇还是泡沫?
    笔记本、台式机、平板二合一?Mac、Win、Linux?
    计算机操作系统:实验2 【银行家算法】
  • 原文地址:https://blog.csdn.net/cwr888/article/details/128112051