python 普通克里金(Kriging)法的实现


Posted in Python onDecember 19, 2019

克里金法时一种用于空间插值的地学统计方法。

克里金法用半变异测定空间要素,要素即自相关要素。

半变异公式为:

python 普通克里金(Kriging)法的实现

其中γ(h) 是已知点 xixj 的半变异,***h***表示这两个点之间的距离,z是属性值。

假设不存在漂移,普通克里金法重点考虑空间相关因素,并用拟合的半变异直接进行插值。

估算某测量点z值的通用方程为:

python 普通克里金(Kriging)法的实现

式中,z0是待估计值,zx是已知点x的值,Wx是每个已知点关联的权重,s是用于估计的已知点数目。
权重可以由一组矩阵方程得到。

python 普通克里金(Kriging)法的实现

python 普通克里金(Kriging)法的实现

此程序对半变异进行拟合时采用的时最简单的正比例函数拟合

数据为csv格式

保存格式如下:

第一行为第一个点以此类推

最后一行是待求点坐标,其中z为未知值,暂且假设为0

python 普通克里金(Kriging)法的实现

代码如下:

import numpy as np
from math import*
from numpy.linalg import *
h_data=np.loadtxt(open('高程点数据.csv'),delimiter=",",skiprows=0)
print('原始数据如下(x,y,z):\n未知点高程初值设为0\n',h_data)
def dis(p1,p2):
 a=pow((pow((p1[0]-p2[0]),2)+pow((p1[1]-p2[1]),2)),0.5)
 return a
def rh(z1,z2):
 r=1/2*pow((z1[2]-z2[2]),2)
 return r
def proportional(x,y):
 xx,xy=0,0
 for i in range(len(x)):
  xx+=pow(x[i],2)
  xy+=x[i]*y[i]
 k=xy/xx
 return k
r=[];pp=[];p=[];
for i in range(len(h_data)):
 pp.append(h_data[i])
for i in range(len(pp)):
 for j in range(len(pp)):
  p.append(dis(pp[i],pp[j]))
  r.append(rh(pp[i],pp[j]))
r=np.array(r).reshape(len(h_data),len(h_data))
r=np.delete(r,len(h_data)-1,axis =0)
r=np.delete(r,len(h_data)-1,axis =1)

h=np.array(p).reshape(len(h_data),len(h_data))
h=np.delete(h,len(h_data)-1,axis =0)
oh=h[:,len(h_data)-1]
h=np.delete(h,len(h_data)-1,axis =1)

hh=np.triu(h,0)
rr=np.triu(r,0)
r0=[];h0=[];
for i in range(len(h_data)-1):
 for j in range(len(h_data)-1):
  if hh[i][j] !=0:
   a=h[i][j]
   h0.append(a)
  if rr[i][j] !=0:
   a=rr[i][j]
   r0.append(a)
k=proportional(h0,r0)
hnew=h*k
a2=np.ones((1,len(h_data)-1))
a1=np.ones((len(h_data)-1,1))
a1=np.r_[a1,[[0]]]
hnew=np.r_[hnew,a2]
hnew=np.c_[hnew,a1]
print('半方差联立矩阵:\n',hnew)
oh=np.array(k*oh)
oh=np.r_[oh,[1]]
w=np.dot(inv(hnew),oh)
print('权阵运算结果:\n',w)
z0,s2=0,0
for i in range(len(h_data)-1):
 z0=w[i]*h_data[i][2]+z0
 s2=w[i]*oh[i]+s2
s2=s2+w[len(h_data)-1]
print('未知点高程值为:\n',z0)
print('半变异值为:\n',pow(s2,0.5))
input()

运算结果

python 普通克里金(Kriging)法的实现

python初学,为了完成作业写了个小程序来帮助计算,因为初学知识有限,有很多地方写的很复杂,可以优化的地方很多。 还望读者谅解,欢迎斧正谢谢!

参考文献:
【1】(美)张康聪 著;陈健飞等译. 地理信息系统导论(第三版). 北京:清华大学出版社, 2009.04.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python学习之asyncore模块用法实例教程
Sep 29 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
python3实现暴力穷举博客园密码
Jun 19 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python设计模式之外观模式实例详解
Jan 17 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
Python数据类型之List列表实例详解
May 08 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
Python函数参数类型及排序原理总结
Dec 19 #Python
python中with语句结合上下文管理器操作详解
Dec 19 #Python
Django中密码的加密、验密、解密操作
Dec 19 #Python
利用OpenCV和Python实现查找图片差异
Dec 19 #Python
Python文本处理简单易懂方法解析
Dec 19 #Python
python类中super() 的使用解析
Dec 19 #Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 #Python
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php判断字符串在另一个字符串位置的方法
2014/02/27 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
轮播的简单实现方法
2016/07/28 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
go语言计算两个时间的时间差方法
2015/03/13 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
python 实现按对象传值
2019/12/26 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
《凡卡》教学反思
2014/04/09 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
python代码实现扫码关注公众号登录的实战
2021/11/01 Python