反距离权重加权插值的理解及Python实现
生活随笔
收集整理的這篇文章主要介紹了
反距离权重加权插值的理解及Python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IDW(反距離里加權插值)
假設 距離較近的事物要比距離較遠的事物更相似。
當為任何未測量的位置預測值時,反距離權重法會采用預測位置周圍的測量值與距離預測位置較遠的測量值相比,距離預測位置最近的測量值對預測值的影響更大。反距離權重法假定每個測量點都有一種局部影響,而這種影響會隨著距離的增大而減小。由于這種方法為距離預測位置最近的點分配的權重較大,而權重卻作為距離的函數而減小,因此稱之為反距離權重法。
原理:
1.計算所有離散數據點與所求網格點的距離,在二維平面空間,離散點(xi,yi)到網格(A,B)的距離Di為:
2.找出離網格點(A,B)最近的N個離散點的距離,則網格點(A,B)上的估算值為:
其中,Zi為離散點i上的觀測值,Z(A,B)為網格點(A,B)上的估算值。
設網格點的x,y 分別為lon,lat,離散采樣點的集合為:lst
def get_h(lon, lat, lst):p0 = [lon, lat]sum0 = 0sum1 = 0temp = []# 遍歷獲取該點距離所有采樣點的距離for point in lst:if lon == point[0] and lat == point[1]:return point[2]Di = distance(p0, point)# new出來一個對象,不然會改變原來lst的值ptn = copy.deepcopy(point)ptn.append(Di)temp.append(ptn)# 根據上面ptn.append()的值由小到大排序temp1 = sorted(temp, key=lambda point: point[3])# 遍歷排序的前15個點,根據公式求出sum0 and sum1for point in temp1[0:15]:sum0 += point[2] / point[3]sum1 += 1 / point[3]return sum0 / sum1# 計算兩點間的距離 def distance(p, pi):dis = (p[0] - pi[0]) * (p[0] - pi[0]) + (p[1] - pi[1]) * (p[1] - pi[1])m_result = math.sqrt(dis)return m_result參考:
https://my.oschina.net/u/4581316/blog/4815801
https://www.freesion.com/article/948976203/
https://cloud.tencent.com/developer/article/1763070
總結
以上是生活随笔為你收集整理的反距离权重加权插值的理解及Python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 多源代码文件编译
- 下一篇: Linux源码编译(一):从头文件说起