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 爬虫多线程详解及实例代码
Oct 08 Python
简单谈谈Python中的闭包
Nov 30 Python
pyenv命令管理多个Python版本
Mar 26 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
python提取log文件内容并画出图表
Jul 08 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
FFrpc python客户端lib使用解析
Aug 24 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
如何完美的建立一个python项目
Oct 09 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 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 魔术变量和魔术函数详解
2015/02/25 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
Python中的super用法详解
2015/05/28 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python回调函数中使用多线程的方法
2017/12/25 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python生成并处理uuid的实现方式
2020/03/03 Python
python实现控制台输出彩色字体
2020/04/05 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
python中time、datetime模块的使用
2020/12/14 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
中英文求职信范文
2014/01/27 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
人资专员岗位职责
2014/04/04 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
酒店员工培训方案
2014/06/02 职场文书