python实现调和反距离空间插值法AIDW

1 简介

AIDW 主要是针对 IDW 的缺点进行了改进,考虑了样本点与预测点的位置,即方向和距离,具体见下图:

在这里插入图片描述

2 改进

IDW 公式:

在这里插入图片描述

从IDW算法可看出,插值点的估算值仅与插值样本距插值点的远近相关,并未考虑样本点的方位性(即样本点被表示为各向同性)。

IDW 插值的基本假设是样点在插值区呈均匀分布。但众多情况下,样点在各向分布并非均匀,甚至会出现样点集中于某一方向的现象,违背了基本假设,其插值合理性就难被保证。针对 IDW 这一插值局限,作者提出了调和反距离权重(AIDW)插值算法。

AIDW 增加了可反映插值点与样本点方位关系的调和权重系数 K,其基本假设是:距插值点近的样本点,对其后方的样本点有遮蔽效应,当两样本点与插值点的连线夹角 α < 360 ° / n \alpha<360°/n α<360°/n(n 为插值搜索邻域内的样点个数)时,遮蔽效应存在,当 α ≥ 360 ° / n \alpha≥360°/n α360°/n 时,遮蔽效应消失。在 AIDW 插值过程中,受遮蔽影响的样本点,其插值权重将被削弱,削弱的程度取决于该样点 K 值的大小。

按上述假设:

  • 图1(a) 所示的 5 个样点在方向上均匀地分布在插值点(中心点)周围,任意两样点与插值点的连线夹角均大于或等于 72°(即α α ≥ 360 ° / 5 \alpha≥360°/5 α360°/5),即认为该5个样点间相互不存在遮蔽效应;
  • 在图1©中,任意两样点与插值点的连线夹角均小于72°,即认为距插值点的近样点,对其后的样点均具有遮蔽效应;在大多情况下,样点在插值点周围的分布应类似图1(b),既不像图1(a)均匀分布,也不像图1©集中分布。
  • 图1(b)中 Z 1 Z_1 Z1 Z 3 Z_3 Z3 对任一样点均无遮蔽, Z 2 Z_2 Z2 Z 4 Z_4 Z4 Z 5 Z_5 Z5 有遮蔽, Z 4 Z_4 Z4 Z 5 Z_5 Z5 也有遮蔽。

在这里插入图片描述

将 IDW 传统的算法思想与本文的基本假设结合,提出了 AIDW 算法:

在这里插入图片描述

sin ⁡ p θ \sin ^p\theta sinpθ的理解:

  • 从下图(a)可以看出, Z i Z_i Zi 逐渐移向 Z 0 Z_0 Z0 的过程种, θ \theta θ 逐渐增大,当三者形成等腰三角形时, θ = 90 ° \theta=90° θ=90°,此时最大,即 sin ⁡ p θ = 1 \sin^p\theta=1 sinpθ=1 Z j Z_j Zj 不会对 Z i Z_i Zi 产生遮蔽影响。
  • 从下图(b)可以看出, Z i Z_i Zi 保持与 Z 0 Z_0 Z0相同的距离向 Z j Z_j Zj 移动,当两者位于同一条线时, Z i Z_i Zi的影响完全被遮蔽,即 θ = 0 ° , sin ⁡ p θ = 0 \theta=0°,\sin^p\theta=0 θ=,sinpθ=0

在这里插入图片描述

计算样例:

按AIDW算法,在图3(b)中因 Z 1 Z_1 Z1 Z 6 Z_6 Z6 Z 3 Z_3 Z3 Z 7 Z_7 Z7 Z 8 Z_8 Z8 Z 4 Z_4 Z4 Z 7 Z_7 Z7有遮蔽影响,这些受遮蔽样点的插值权重被削减, Z 10 、 Z 11 、 Z 12 Z_{10}、Z_{11}、Z_{12} Z10Z11Z12分别被 Z 4 Z_{4} Z4 Z 3 Z_3 Z3 Z 7 Z_7 Z7 完全遮蔽,它们的插值权重降至为0。依照式(2)和式(3),最终插值点估算值的计算式为:

在这里插入图片描述

  • Z Z Z 为插值点(中心点)估算值
  • Z 1 − Z 9 Z_1-Z_9 Z1Z9为样点观测值
  • d 1 − d 9 d_1-d_9 d1d9为样点与插值点的欧氏距离
  • p 是幂指数
  • θ \theta θ 角如图3(b)所示

在这里插入图片描述

3 程序设计流程

AIDW 的插值程序可分为插值前准备和插值计算两个过程:

  • 插值前准备主要是用于搜索合适的插值样点,并为下一步的插值计算提供 d i d_i di f i j f_{ij} fij 值;
  • 插值计算过程主要是求算反映样点遮蔽程度的 sin ⁡ p θ i j \sin^p\theta_{ij} sinpθij 值,并结合 d i 、 z i d_i、z_i dizi 值求算插值点的Z值。

在这里插入图片描述

  • 插值搜索邻域的大小以格点数(k×k)表示
  • m 是搜索邻域内的样点数
  • n 是插值所需的样点数
  • d、f 分别为样点与插值点的欧氏距离和两样点间的欧氏距离
  • i、j、u、v 均为插值样点的序号
4 插值结果

在这里插入图片描述

  • 对比 M 点(黑色框),IDW 出现孤立圆现象(站点集中于一侧),AIDW 消除了孤立圆现象
  • 对比 C 点(红色框),IDW 出现同心圆现象,AIDW 消除了同心圆现象
  • 对比 K 点(黄色框),两者均出现孤立圆,通过分析,K 点周围的站点分布均匀。

从上图可以看出 AIDW 有效改进了 IDW 的缺点,同时又能保留 IDW 的插值思想,但 AIDW 需要计算 θ \theta θ ,因此在插值时间上要比 IDW 慢。

5 python 实现
from sklearn.neighbors import NearestNeighbors"""类函数"""
class AIDW:def __init__(self, x, y, m,p=2):self.m = m # 搜索邻域内的样点数self.nbrs = NearestNeighbors(n_neighbors=m, algorithm='ball_tree').fit(x)self.thresh = 360/mself.p = pself.y = yself.x = xdef fit(self, x_new):indices = self.nbrs.kneighbors(x_new, return_distance=False)x_sample = self.x[indices[0]]y_sample = self.y[indices[0]]x_ = x_sample-x_newzi = []ki = 1for i in range(1, self.m-1):for j in range(i):cos_ = np.sum(x_[i]*x_[j])/((np.sum(x_[i]**2)**(1/2))*(np.sum(x_[j]**2)**(1/2)))radian = np.arccos(cos_)angle = radian*180/np.pi if angle>=self.thresh:continueelse:ki*=np.sin(radian)**self.pdi = np.sum(x_[i]**2)**(1/2)zi.append(ki/(di**self.p))z = np.sum(np.array(zi)*y_sample[1:-1])/np.sum(zi)return z"""demo"""
import numpy as np
import matplotlib.pyplot as plt# create sample points with structured scores
X1 = 10 * np.random.rand(1000, 2) -5def func(x, y):return np.sin(x**2 + y**2) / (x**2 + y**2 )z1 = func(X1[:,0], X1[:,1])# 'train'
aidw = AIDW(X1, z1, m=15)# 'test'
spacing = np.linspace(-5., 5., 100)
X2 = np.meshgrid(spacing, spacing)
grid_shape = X2[0].shape
X2 = np.reshape(X2, (2, -1)).T
z2 = []
for x2 in X2:z2.append(aidw.fit(x2.reshape(1,-1)))
z2 = np.array(z2)# plot
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex=True, sharey=True, figsize=(10,3))
ax1.contourf(spacing, spacing, func(*np.meshgrid(spacing, spacing)))
ax1.set_title('Ground truth')
ax2.scatter(X1[:,0], X1[:,1], c=z1, linewidths=0)
ax2.set_title('Samples')
ax3.contourf(spacing, spacing, z2.reshape(grid_shape))
ax3.set_title('Reconstruction')
plt.show()

在这里插入图片描述

参考:
顾及方向遮蔽性的反距离权重插值法.李正泉.
An Adjusted Inverse Distance Weighted Spatial Interpolation Method.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206929.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

99. 恢复二叉搜索树

99. 恢复二叉搜索树 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 99. 恢复二叉搜索树 https://leetcode.cn/problems/recover-binary-search-tree/description/ 完成情况&#xff1a; 解题思路&a…

接口自动化测试实战经验分享,测试用例也能自动生成

作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&#xff1b;版本兼容逻辑多&#xff0c;修复一个 BUG 触发了更多 BUG&#xff1b;上线时系统监控毫无异常&#xff0c;过段时间用户投诉某个页面无数据&#xff1b;改动祖传代码时如履…

HCIA-Datacom跟官方路线学习

通过两次更换策略。最后找到最终的学习方案&#xff0c;华为ICT官网有对这个路线的学习&#xff0c;hcia基础有这个学习路线&#xff0c;hcip也有目录路线。所以&#xff0c;最后制定学习路线&#xff0c;是根据这个认证的路线进行学习了&#xff1a; 官网课程&#xff1a;课程…

rsync配置和守护进程实践

目录 一、rsync概念 1.rsync简介 2.rsync特点 3、增量和全局传输 二、Rsync工作方式 1.准备好rsync备份服务器 2.本地的数据传输模式 3.远程的数据传输模式 4.rsync数据推拉模式 三、实践 1.准备三台虚拟机 2.都安装rsync服务 3.拉取远程文件 3.推送文件 4.rsyn…

机器学习实战第1天:鸢尾花分类任务

专栏介绍 欢迎订阅专栏——机器学习实战 机器学习实战_Nowl的博客-CSDN博客 纸上得来终觉浅 本专栏项目将着重于解决各类实际机器学习问题&#xff0c;带你上手各种场景的实际问题 数据集可以在我的资源中找到&#xff0c;也可以自行搜索 文中导入数据集的路径要改成自己的…

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…

采用connector-c++ 8.0操作数据库

1.下载最新的Connector https://dev.mysql.com/downloads/connector/cpp/&#xff0c;下载带debug的库。 解压缩到本地&#xff0c;本次使用的是带debug模式的connector库&#xff1a; 注&#xff1a;其中mysqlcppconn与mysqlcppconn8的区别是&#xff1a; 2.在cmakelist…

并发编程:共享模型之管程

目录 管程 临界区 竞态条件 案例 通过synchronized阻塞解决 synchronized添加位置 设计模式之保护性暂停 Join原理 修改线程状态的几种方法 单向改变不可返回的状态 双向可改变的状态 多把锁 线程活跃性 死锁 定位死锁 活锁 饥饿 ReentrantLock 可重入 可打…

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器&#xff0c;可以在信号栏的右侧显示当前访问录音机和Camera的应用&#xff0c;点击后可以跳转到相应应用的权限界面&#xff0c;消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能&#xff0c;消费者…

【endnote】如何将参考文献放到想放的位置

1. 方式 直接将生成的文献全选拖到想放的位置 注意&#xff1a;不要使用ctrlx这种操作。 2.具体操作 2.1 新建测试文档 如下图&#xff1a; 2.2 引用两篇文献】 如下图&#xff1a; 2.3 测试 如下图&#xff0c;选中所有已经引用的文献。 拖拽到想要防止的位置。 新…

详解Python中哈希表的使用。站在开发者角度,与大家一起探究哈希的世界。

文章目录 1. 前言2. 哈希表2.1 哈希函数2.2 哈希算法2.3 常见哈希算法2.4 哈希冲突 3.总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…

ELF header

1. ELF header定义 ELF header的定义可以在 /usr/include/elf.h 中找到。Elf32_Ehdr是32位 ELF header的结构体。Elf64_Ehdr是64位ELF header的结构体。 所以&#xff0c;ELF header在ELF文件中的大小与位置是确定的&#xff0c;位置位于文件头部&#xff0c;大小则是Elf_Ehdr…