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实现分割文件及合并文件的方法
Jul 10 Python
Python while 循环使用的简单实例
Jun 08 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
Python中的TCP socket写法示例
May 11 Python
python实现统计代码行数的小工具
Sep 19 Python
下载官网python并安装的步骤详解
Oct 12 Python
python实现身份证实名认证的方法实例
Nov 08 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
django 解决扩展自带User表遇到的问题
May 14 Python
python爬虫中采集中遇到的问题整理
Nov 27 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
js初始化验证实例详解
2016/11/26 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
详解webpack自动生成html页面
2017/06/29 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Opencv求取连通区域重心实例
2020/06/04 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
上课讲话检讨书范文
2015/05/07 职场文书
2015入党自传格式范文
2015/06/26 职场文书