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 version 2.7 required, which was not found in the registry
Aug 26 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
Python中用于返回绝对值的abs()方法
May 14 Python
简单实现python爬虫功能
Dec 31 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python 可视化库PyG2Plot的使用
Jan 21 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与SQL注入攻击[二]
2007/04/17 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python pickle模块用法实例分析
2015/05/27 Python
Python松散正则表达式用法分析
2016/04/29 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
在python里面运用多继承方法详解
2019/07/01 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Python sublime安装及配置过程详解
2020/06/29 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
python装饰器代码深入讲解
2021/03/01 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
室内趣味活动方案
2014/08/24 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
个人党性分析总结
2015/03/05 职场文书
车间班组长竞聘书
2015/09/15 职场文书