空间统计学:快速理解反距离加权法(IDW)

2023-11-10 22:30

本文主要是介绍空间统计学:快速理解反距离加权法(IDW),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

空间插值

说到反距离加权法,首先我们要先了解空间插值的概念

对于一个平面,我们并不能获取所有区域的精确信息,所以一般情况下,我们通过采样的方式只获取部分点的信息。然后通过空间插值,计算出一个区域所有的数据

d791a7191d254d26b72f4fd2ddf7c43a.png

左图我采样了部分点的高程数据,右图我通过这部分高程数据,通过空间插值计算出所有区域的数据。

具体插值原理是什么呢,见下图

73d23302c11746c0aa4851c3b5bbcded.png

 9和10是数据已知的点,那么我通过两点的数据,结合它们之间的距离,我就可以估算出红点的具体数据。

对于空间上的点来说,未知值的点与样本点之间的距离决定了其最终值的估计。

那么具体他是怎么结合距离数据和本身的值计算位置数据的呢?常用的插值方法包括反距离加权法(IDW)、克里金(Kriging)等。那么本篇文章就是讲解其中之一的反距离加权法。

反距离加权法(IDW)

反距离加权法(Inverse Distance Weighting, IDW)是一种常见的空间插值方法,常用于将已知分散的样点数据插值为连续的地表或地下场景。下面是反距离加权法的简要步骤:

  1. 确定待插值位置和已知样点位置。
  2. 根据待插值位置与已知样点的欧几里得距离(或其他距离指标),计算每个样点的权重,一般权重与距离的倒数成正比。
  3. 使用每个样点的权重对其函数值进行加权平均,得到插值结果。

下面详细解释这三个步骤:

1. 确定待插值位置和已知样点位置

首先我们需要确定待插值位置的坐标和范围,以及已知样点的坐标和数值。

2. 计算权重

对于每个待插值位置,我们需要计算它与所有已知样点的距离,并将距离转化为权重。一般来说,样点与待插值位置之间的欧几里得距离越小,样点对插值结果的影响就越大,因此权重与距离成反比,可使用以下公式计算:

19978f4216684084828008426447332f.png

其中 wi​ 是第 i 个样点的权重,di​ 是该样点与待插值位置的距离,p 是一个可调参数,一般取值为 2 (欧几里得距离)或 3 (曼哈顿距离),也可以通过交叉验证等方法来确定最优的 p 值。 

3. 加权平均求解

计算出每个已知样点的权重后,我们可以将它们的函数值进行加权平均,得到待插值位置的函数值。具体地,设已知样点的个数为 N,第 i 个样点的坐标为 (xi​,yi​),权重为 wi​,函数值为 zi​,则待插值位置的函数值z(x,y) 可以通过以下公式计算:

e5f69fd28fea4e69965721bf799f7642.png

 其中分子为各样点函数值乘以对应权重的总和,分母为权重之和,它们的比值即为插值结果。

反距离加权法的优缺点

反距离加权法的主要优点是简单易用,而且在样点分布相对均匀的情况下效果较好。它也有一些缺点,例如插值结果表现出的锯齿状特征、函数值抖动等问题。为解决这些问题,通常需要采用其他空间插值方法,例如径向基函数插值(Radial Basis Function, RBF)、克里金插值等。

代码实现

使用 Python 的 Matplotlib 库生成反距离加权法(IDW)插值示意图

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf# 构造样点数据
np.random.seed(0)
x = np.random.rand(20) * 10 - 5
y = np.random.rand(20) * 10 - 5
z = np.sin(np.sqrt(x**2 + y**2))
xi, yi = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))# 计算插值结果
rbf = Rbf(x, y, z, function='inverse')
zi = rbf(xi, yi)# 绘制示意图
plt.imshow(zi, cmap='rainbow', extent=(-5, 5, -5, 5))
plt.colorbar()
plt.scatter(x, y, c=z, cmap='rainbow', edgecolors='black', linewidths=1)
plt.title('Inverse Distance Weighting Interpolation')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

 解释代码:

第一部分:

当我们使用反距离加权法对二维数据进行插值时,需要确定已知样点的位置和对应数值,以及待插值位置的坐标。内容包括通过numpy库生成20个随机的二维坐标点,并在这些点上计算对应的函数值。在x轴和y轴上各取50个均匀分布的点,形成二维网格,作为插值结果的横纵坐标。

第二部分:

利用scipy库中的Rbf函数进行插值,并指定插值函数为inverse distance weighting(IDW)。

第三部分:

将插值结果用彩虹色表现出来,并添加颜色条、散点图等元素,以便更好地展示

结果

13fbbaf2f35a4acb921fc70a8e97f75b.png

其中:

  • 圆点表示已知样点,每个样点都有一个数值。
  • 彩色网格表示未知区域,我们需要计算这些位置的数值。
  • 网格上的每个颜色块表示对应位置的插值结果,颜色越深表示对应位置的数值越大。

通过反距离加权法,可以计算未知区域内每个网格点的数值。以左上角网格点为例,其数值可通过对已知样点进行加权平均得到,权重与样点间的距离成反比,距离越近的样点权重越大。最终得到的插值结果可用于制图、分析等用途。

在该图中,我们可以观察到:

  • 插值结果整体呈现出类似于圆形的形状,与样点分布的形状有关。
  • 在样点位置附近,插值结果的颜色更深,数值更大;而在远离样点的位置,插值结果的颜色较浅,数值较小。
  • 样点之间的插值结果呈现出类似于“锯齿状”的形态,在实际应用过程中需要注意。

总的来说,反距离加权法是一种简单而有效的空间插值方法,适用于各种数据类型和应用领域。

这篇关于空间统计学:快速理解反距离加权法(IDW)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385688

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。