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检测远程udp端口是否打开的方法
Mar 14 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
Django 表单模型选择框如何使用分组
May 16 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
python 安装移动复制第三方库操作
Jul 13 Python
python删除文件、清空目录的实现方法
Sep 23 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
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python中字典(Dictionary)用法实例详解
2015/05/30 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python编写一个闹钟功能
2017/07/11 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
Python3 max()函数基础用法
2019/02/19 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python3并发写文件与Python对比
2019/11/20 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
党员学习新党章思想汇报
2014/10/25 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL