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实现文本文件合并
Dec 29 Python
Python部署web开发程序的几种方法
May 05 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
python 获取url中的参数列表实例
Dec 18 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
django rest framework serializers序列化实例
May 13 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的配置文件php.ini
2006/10/09 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python中几种导入模块的方式总结
2017/04/27 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python中sys.argv函数精简概括
2018/07/08 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python使用minimax算法实现五子棋
2019/07/29 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
中软国际Java程序员笔试题
2014/07/19 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
高中数学教师求职信
2013/10/30 职场文书
护士求职推荐信范文
2013/11/23 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
施工安全责任书范本
2014/07/24 职场文书
户籍证明格式
2014/09/15 职场文书
防灾减灾标语
2014/10/07 职场文书
五好家庭事迹材料
2014/12/20 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
python实现简单倒计时功能
2021/04/21 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python