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脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
python常见的格式化输出小结
Dec 15 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python实现点对点聊天程序
Jul 28 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
pytorch 自定义数据集加载方法
Aug 18 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
Python卷积神经网络图片分类框架详解分析
Nov 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维护文件系统
2006/10/09 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
JS array 数组详解
2009/03/22 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
Python矩阵常见运算操作实例总结
2017/09/29 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python 循环数据赋值实例
2019/12/02 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
实习护理工作自我评价
2013/09/25 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
阳光体育活动总结
2014/04/30 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python