python 普通克里金(Kriging)法

克里金法时一种用于空间插值的地学统计方法。
克里金法用半变异测定空间要素,要素即自相关要素。
半变异公式为:
在这里插入图片描述
其中 γ( h ) 是已知点 xi xj 的半变异,***h***表示这两个点之间的距离, z 是属性值。

假设不存在漂移,普通克里金法重点考虑空间相关因素,并用拟合的半变异直接进行插值。
估算某测量点z值的通用方程为:
在这里插入图片描述
式中,z0是待估计值,zx是已知点x的值,Wx是每个已知点关联的权重,s是用于估计的已知点数目。
权重可以由一组矩阵方程得到。
在这里插入图片描述
在这里插入图片描述
此程序对半变异进行拟合时采用的时最简单的正比例函数拟合
数据为csv格式
保存格式如下:
第一行为第一个点以此类推
最后一行是待求点坐标,其中z为未知值,暂且假设为0

在这里插入图片描述
代码如下:

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初学,为了完成作业写了个小程序来帮助计算,因为初学知识有限,有很多地方写的很复杂,可以优化的地方很多。 还望读者谅解,欢迎斧正谢谢!

参考文献:
【1】(美)张康聪 著;陈健飞等译. 地理信息系统导论(第三版). 北京:清华大学出版社, 2009.04.

python 普通克里金(Kriging)法克里金法时一种用于空间插值的地学统计方法。克里金法用半变异测定空间要素,要素即自相关要素。半变异公式为:其中γ(h) 是已知点 xi 和 xj 的半变异,***h***表示这两个点之间的距离,z是属性值。假设不存在漂移,普通克里金法重点考虑空间相关因素,并用拟合的半变异直接进行插值。估算某测量点z值的通用方程为:式中,z0是待估计值,... N维度上的普通和通用克里金kriging是kriging的基本实现, 是使用高斯过程回归的插值方kriging支持普通克里金和通用克里金(使用多项式漂移项)以及三种半变异函数模型:高斯,球形和指数。 在存在漂移的情况下(整个数据空间的平均值变化),观察到的半变异函数可能会出现偏差(请参见Starks&Fang,1982,Mathematical Geology,14,4: : )。 kriging尝试通过在生成半变异函数之前先删除拟合的漂移多项式项来消除此偏差。 直接从此存储库安装: pip install git+https://github.com/tvwenger/kriging.git 或者,克隆存储库并: python setup.py install from kriging import kriging data_interp 适用于PythonKriging工具包。 该代码支持2D和3D普通和通用克里金。 内置了标准变异函数模型(线性,幂,球面,高斯,指数),但也可以使用自定义变异函数模型。 2D通用克里金代码当前支持区域线性,对数对数和外部漂移项,而3D通用克里金代码在所有三个空间维度上都支持区域线性漂移项。 两种通用克里金也都支持通用的“指定”和“功能”漂移功能。 使用“指定的”漂移功能,用户可以手动指定每个数据点和所有网格点的漂移值。 借助“功能性”漂移功能,用户可以提供定义漂移的空间坐标的可调用函数。 该软件包包括一个模块,该模块包含的功能对于使用ASCII网格文件( \*.asc )应该有用。 有关更多详细信息和示例,请参见的文档。 PyKrige需要Python 3.5以上版本以及numpy,scipy。 可以通过以下方式从PyPi安装: pip install p
克里金Kriging) 克里金算法提供的半变异函数模型有高斯、线形、球形、阻尼正弦和指数模型等,在对气象要素场插值时球形模拟比较好。既考虑了储层参数的随机性,有考虑了储层参数的相关性,在满足插值方差最小的条件下,给出最佳线性无偏插值,同时还给出了插值方差。 与传统的插值方(如最小二...
MySQL相关常识欢迎使用Markdown234新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown234 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mark
x = np.array([, 1, 2, 3, 4, 5]) y = np.array([, 1, 2, 3, 4, 5]) z = np.array([, .5, 2, 4, 3.5, 1]) # 创建 Rbf 对象 rbf = Rbf(x, y, z, function='linear') xi = np.linspace(, 5, 11) yi = np.linspace(, 5, 11) XI, YI = np.meshgrid(xi, yi) zi = rbf(XI, YI) # 输出结果 print(zi) 这段代码实现了对输入数据进行克里金插值,并输出插值结果。
lucy_seven: rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/D435i.yaml /home/lcy/orbslam2_modified/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/RGBD: error while loading shared libraries: libDBoW2.so: cannot open shared object file: No such file or directory 最后一步运行出错了 这是什么问题呀? Orbslam2 稠密点云 +D435i实现(Ubuntu18.04) 林林林青冥: 不确定,可以在cmake里把pcl的版本号改一下试试。表情包表情包表情包 Orbslam2 稠密点云 +D435i实现(Ubuntu18.04) zero157: 博主,跑orbslam2的这段程序使用pcl1.12版本可以吗?现在电脑里安装了pcl1.12,就怕再安装pcl1.8之后会冲突 Orbslam2 稠密点云 +D435i实现(Ubuntu18.04) 林林林青冥: 点云是实时保存的,可以查看一下pointcloud线程中是否添加点云保存代码,文中有所提到