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实现实例
Apr 26 Python
python采用getopt解析命令行输入参数实例
Sep 30 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
python 日志增量抓取实现方法
Apr 28 Python
浅谈Python反射 & 单例模式
Mar 21 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python中altair可视化库实例用法
Jan 26 Python
python 详解turtle画爱心代码
Feb 15 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的in_array低性能问题
2013/09/17 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
原生js开发的日历插件
2017/02/04 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
js实现蒙版效果
2020/01/11 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
出国考察邀请函
2014/01/21 职场文书
电气自动化求职信
2014/06/24 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
2016年教代会开幕词
2016/03/04 职场文书
创业计划书之养殖业
2019/10/11 职场文书
python如何获取网络数据
2021/04/11 Python
python批量更改目录名/文件名的方法
2021/04/18 Python