1. 程式人生 > 其它 >基於python的IDW插值方法(一)(網轉CSDN)

基於python的IDW插值方法(一)(網轉CSDN)

什麼是IDW(反距離權重)插值演算法。

給出以下定義:

以待估計點為中心,確立一個範圍,在這個範圍內的所有已知點, 都將以自身到待估計點的距離的反比作為權重,對待估計點造成影響,這就是IDW(反距離權重)插值演算法。

我們可以很清楚的看到,在進行IDW插值演算法時,必要的引數只有待估計點,點,,及其值(樣本值)。另外,我們給出一個冪引數來控制已知點對內插值的影響。其中,冪引數是一個正實數,預設值為2。(一般0.5到3的值可獲得最合理的結果)。

下面給出權重公式:

 

 其中,為某已知點到待估計點的距離,為冪引數。

在這些條件下,我定義了以下程式碼:

 1 # 求距離反比平方之和
 2 def getDsum(x,y,list=[]):
3 dsum = 0 4 for points in pointlist: 5 point_x = points[0] 6 point_y = points[1] 7 8 d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2) 9 dsum = (1 / d)**2 + dsum 10 return dsum
 1 # 求解各已知點的權重
 2 def getWeight(x,y,list=[]):
 3     dsum = getDsum(x,y,list)
4 weight = [] 5 for points in list: 6 dlist=[] 7 point_x = points[0] 8 point_y = points[1] 9 10 d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2) 11 dlist.append(d) 12 wei = ((1/d)**2)/dsum 13 weight.append(wei) 14 return
weight
 1 # 求得待估計點
 2 def IDW_self(x,y,weight,list = []):
 3     i = 0
 4     z=0
 5     for points in list:
 6         point_z = points[2]
 7         z = point_z*weight[i]+z
 8         i=i+1
 9     Value = "點({0},{1})的插值為{2}".format(x,y,z)
10     return Value

接著給出以下引數(pointlist中的點引數對應的是點的xy座標及樣本值):

1 pointlist = [(1,2,20),(2,3,26),(3,4,23)]
2 x=0
3 y=0
4 weight = getWeight(x,y,pointlist)
5 pointvalue = IDW_self(x,y,weight,pointlist)
6 print pointvalue

結果

1 點(0,0)的插值為21.8349514563

 


————————————————
版權宣告:本文為CSDN博主「大魚的奇妙冒險」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/clearlove990/article/details/119984256