前言: 本人研一,刚开始学python,初衷其实是想以arcgis软件上没有的插值方法进行空间插值,奈何人菜瘾大,只能先从基础的插值方法开始,这次的IDW插值算是一个开始吧,相关内容也会慢慢进行记录,希望自己能在这个方面一直做下去。

废话不多说我们直接开始。

首先,我们需要明确一下什么是IDW(反距离权重)插值算法。

给出以下定义:

以待估计点为中心,确立一个范围,在这个范围内的所有已知点 都将以自身到待估计点的距离的反比作为权重,对待估计点造成影响,这就是IDW(反距离权重)插值算法。

我们可以很清楚的看到,在进行IDW插值算法时,必要的参数只有待估计点,点,及其值(样本值)。另外,我们给出一个幂参数来控制已知点对内插值的影响。其中,幂参数是一个正实数,默认值为2。(一般0.5到3的值可获得最合理的结果)。

下面给出权重公式:

其中,为某已知点到待估计点的距离,为幂参数。

在这些条件下,我定义了以下代码:

# 求距离反比平方之和
def getDsum(x,y,list=[]):dsum = 0for points in pointlist:point_x = points[0]point_y = points[1]d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2)dsum = (1 / d)**2 + dsumreturn dsum
# 求解各已知点的权重
def getWeight(x,y,list=[]):dsum = getDsum(x,y,list)weight = []for points in list:dlist=[]point_x = points[0]point_y = points[1]d = math.sqrt((point_x - x) ** 2 + (point_y - y) ** 2)dlist.append(d)wei = ((1/d)**2)/dsum  weight.append(wei)return  weight
# 求得待估计点
def IDW_self(x,y,weight,list = []):i = 0z=0for points in list:point_z = points[2]z = point_z*weight[i]+zi=i+1Value = "点({0},{1})的插值为{2}".format(x,y,z)return Value

接着给出以下参数(pointlist中的点参数对应的是点的xy坐标及样本值):

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

结果如图:

点(0,0)的插值为21.8349514563

至此,对于单个待估计点的IDW插值已经完成,接下来要思考的,是如何实现遍历包含所有样本点在内的extent的所有点,并使用IDW插值算法得到所有待估计点的值;以及如何将这些点,在arcgis上建立栅格模型并进行显示。

关于IDW的相关参考:http://blog.sina.com.cn/s/blog_6316e2af0101l54m.html

当然还看了很多但是说实话并没什么用来着

写在最后:作为一名初学者,鄙人能力十分有限,算法肯定是不完善的,如果还有什么见解,也欢迎各位指正,希望大家能相互学习,相互进步。另外,由于在学习编程的同时还在学习《统计学习方法》,因此下一篇关于IDW插值方法的文章发布的时间可能是明天,可能是下周,也可能是一个月...也可能这几天会更一篇关于《统计学习方法》的内容,谢谢大家。

原创不易欢迎转载QAQ

基于python的IDW插值方法(一)相关推荐

  1. 【CV】OpenCV(基于Python)学习笔记

    以下内容中的页码均来自<OpenCV 4详解 : 基于Python> 目录 第2章 载入.显示与保存数据 2.2 图像的读取与显示 2.2.1 图像读取函数 cv.imread() 2.2 ...

  2. 基于Python的人工智能美颜系统

    基于Python的人工智能美颜系统使用PyQt5模块搭建可视化界面,使用Dlib模型(shape_predictor_68_face_landmarks.dat)实现人脸关键点检测和定位,人脸美颜(美 ...

  3. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?

    原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...

  4. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  5. 【组队学习】【31期】基于Python的办公自动化

    基于Python的办公自动化 航路开辟者:牧小熊.刘雯静.张晓东.吴争光.隆军 领航员:六一 航海士:牧小熊.李显.刘羽中.王晓亮 基本信息 开源内容:https://github.com/dataw ...

  6. 【组队学习】曹志宾:基于Python的会员数据化运营

    分享人:曹志宾,Datawhale成员,香港科技大学硕士在读 分享内容: 案例描述与分析 前期准备与数据预处理 RFM模型使用与操作 Excel中的RFM分析 组队学习: 红星:基于Python的会员 ...

  7. 【组队学习】孙健坤:基于Python的会员数据化运营

    分享人:孙健坤,哈尔滨工业大学 分享内容: 什么是会员制? 什么是会员数据化运营? 如何进行会员数据化运营 组队学习: 基于Python的会员数据化运营 开源内容: https://github.co ...

  8. 【组队学习】【28期】基于Python的会员数据化运营

    基于Python的会员数据化运营 论坛版块: http://datawhale.club/c/team-learning/37-category/37 开源内容: https://github.com ...

  9. 送书 | 你一定能看懂的算法基础书(代码示例基于Python)

    本文引自图灵教育<算法图解> 你一定能看懂的算法基础书:代码示例基于Python:400多个示意图,生动介绍算法执行过程:展示不同算法在性能方面的优缺点:教会你用常见算法解决每天面临的实际 ...

最新文章

  1. oracle 替换逗号,oracle自定义函数:将字符串中的特殊字符转化为逗号
  2. LeetCode Sort Characters By Frequency
  3. hdu 3046(最小割最大流)
  4. 操作系统原理: 操作系统概述
  5. Kubernetes-Label
  6. jvm系列(十一):Java 8-从持久代到metaspace
  7. D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)
  8. 带你全面了解真正的CleanMyMac,CleanMyMac使用说明
  9. Leetcode 刷题笔记(三十) ——动态规划篇之子序列问题:回文
  10. linux和主机共享文件,设置Linux虚拟机与主机共享文件的方法
  11. (已拿offer)腾讯实习生笔试到面试总结(附带华为阿里面试经历)
  12. gazebo教程(八)场景建模
  13. dataframe类型数据的遍历_pandas中遍历dataframe的每一个元素
  14. the crew 服务器维护,飙酷车神 the crew入门指南 新手必看
  15. 芯片验证漫游指南_IC验证入门资料
  16. 百家号不推荐的文章如何解决呢?
  17. 怎么把线稿提取出来_如何提取线稿为你所用?不会的来!
  18. EmguCV入门(一)
  19. 计算机系统中必不可少的系统软件是哪个,计算机系统中必不可少的软件
  20. 『清华ERNIE』 与 『百度ERNIE』 的爱恨情仇

热门文章

  1. 从别人那copy点学习资料
  2. zigbee3.0 ota 实验
  3. Db2 insert got DSNISGRT:500A abend
  4. excel 中vb组合框_在Excel 2010中修复组合框大小调整
  5. 思科交换机等设备基本配置
  6. 通过php内核变量绕过,利用PHP内核变量绕过disable_functions(附完整代码)
  7. 镜头的焦距与视场角简介!
  8. window文件格式转换成linux格式
  9. c ||和,if判断语句
  10. 【LBS】移动互联网基于LBS地理位置应用开发必备