Python克里金插值包pykrige的基本使用


克里金插值簡要介紹

克里金(kriging)插值是在有限區域內對區域化變量進行無偏最優估計的一種方法(用於估計在空間上有相關性的值,比如空氣質量,相隔很近的位置的數值接近)。無偏指的是估計值和實際值之差的期望等於零,最優指的是估計值和實際值的方差最小。基於這一特點使得克里金插值的效果比其他插值方法要好很多。

簡單來說克里金(kriging)插值干的事情就是:已經有一些坐標和這些坐標處的真實值,我們可以稱之為采樣點。然后把這些采樣點輸入到克里金插值中,我們就可以用來估計其他未知位置處的值。

在Python里,有兩個GitHub評分比較高的克里金插值包,pykrige和pykriging。我兩個都用過,感覺pykrige使用起來更加方便好用。

pykrige的基本使用

下面代碼給出了使用普通克里金進行插值的一個簡單例子,其他類型的克里金插值類似。

from pykrige.ok import OrdinaryKriging
import numpy as np
from matplotlib import pyplot as plt

# 已知采樣點的數據,是坐標(x,y)和坐標對應的值
# 矩陣中第一列是x,第二列是y,第三列是坐標對應的值
data = np.array(
    [
        [0.1, 0.1, 0.9],
        [0.2, 0.1, 0.8],
        [0.1, 0.3, 0.9],
        [0.5, 0.4, 0.5],
        [0.3, 0.3, 0.7],
    ])

# 網格
x_range = 0.6
y_range = 0.6
range_step = 0.1
gridx = np.arange(0.0, x_range, range_step) #三個參數的意思:范圍0.0 - 0.6 ,每隔0.1划分一個網格
gridy = np.arange(0.0, y_range, range_step)

ok3d = OrdinaryKriging(data[:, 0], data[:, 1], data[:, 2], variogram_model="linear") # 模型
# variogram_model是變差函數模型,pykrige提供 linear, power, gaussian, spherical, exponential, hole-effect幾種variogram_model可供選擇,默認的為linear模型。
# 使用不同的variogram_model,預測效果是不一樣的,應該針對自己的任務選擇合適的variogram_model。

k3d1, ss3d = ok3d.execute("grid", gridx, gridy) # k3d1是結果,給出了每個網格點處對應的值


print(np.round(k3d1,2))
#輸出的結果
[[0.91 0.87 0.81 0.75 0.7 0.66]
 [0.92 0.9 0.8 0.74 0.68 0.63]
 [0.92 0.89 0.81 0.72 0.65 0.59]
 [0.91 0.9 0.8 0.7 0.62 0.55]
 [0.88 0.84 0.77 0.68 0.59 0.5]
 [0.84 0.8 0.74 0.67 0.59 0.53]]

# 繪圖
fig, (ax1) = plt.subplots(1)
ax1.imshow(k3d1, origin="lower")
ax1.set_title("ordinary kriging")
plt.tight_layout()
plt.show()


黃色是值比較大的區域


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM