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定时器使用示例分享
Feb 16 Python
python实现simhash算法实例
Apr 25 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
Python实现读取文件最后n行的方法
Feb 23 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
Python实现ping指定IP的示例
Jun 04 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
python基于递归解决背包问题详解
Jul 03 Python
Python pandas库中的isnull()详解
Dec 26 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
PyMongo 查询数据的实现
Jun 28 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
Dedecms常用函数解析
2008/02/01 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
python 保存float类型的小数的位数方法
2018/10/17 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python input函数使用实例解析
2019/11/22 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
工程概预算专业毕业生求职信
2013/10/04 职场文书
学生党支部先进事迹
2014/02/04 职场文书
工程采购员岗位职责
2014/03/09 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
南极大冒险观后感
2015/06/05 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
教你nginx跳转配置的四种方式
2022/07/07 Servers