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 01 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python语法快速入门指南
Oct 12 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
python中def是做什么的
Jun 10 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
Python字符串的15个基本操作(小结)
Feb 03 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的5个入手程序
2006/11/23 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python读取Excel的方法实例分析
2015/07/11 Python
使用python实现个性化词云的方法
2017/06/16 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
python next()和iter()函数原理解析
2020/02/07 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
英文自我鉴定
2013/12/10 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
聘任合同书
2015/09/21 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis