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 相关文章推荐
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python中range()与xrange()用法分析
Sep 21 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
让代码变得更易维护的7个Python库
Oct 09 Python
详解Python 函数如何重载?
Apr 23 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
python如何输出反斜杠
Jun 18 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
python中封包建立过程实例
Feb 18 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 远程关机操作的代码
2008/12/05 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
司机职责范本
2014/03/08 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
数据设计之权限的实现
2022/08/05 MySQL