基于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

posted @ 2022-04-12 17:04  EROEG  阅读(716)  评论(0编辑  收藏  举报