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 04 Python
Python实现备份文件实例
Sep 16 Python
理解Python中的类与实例
Apr 27 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
python使用magic模块进行文件类型识别方法
Dec 08 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
解决echarts中饼图标签重叠的问题
May 16 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 Python
python 中yaml文件用法大全
Jul 04 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
实用函数4
2007/11/08 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Series和DataFrame使用简单入门
2019/11/13 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
我的求职计划书
2014/01/10 职场文书
公司租车协议书
2015/01/29 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
网络研修随笔感言
2015/11/18 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis