迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的 3D 插值

作者:迹忆客 最近更新:2023/06/13 浏览次数:

插值是在离散集的定义范围内构造新数据点的方法。 插值意味着找到点或曲线之间的值。

从数学的角度来看,插值是获取位于其他已知数据点之间的特定未知数据点的值。


插值的重要性

插值是进行预测、数据分析和许多其他应用的强大工具。 它预测地理相关数据的未知值,例如噪音水平、降雨量、海拔等。

插值有很多用途。 在机器学习 (ML) 中,我们经常处理数据集中的缺失数据,并且通常使用插值来替代这些值。


在 Python 中安装用于插值的 SciPy

要在 Python 中使用插值,我们需要使用 SciPy 核心库,更具体地说,是插值模块。

SciPy 为数学处理和数据分析优化提供了许多有价值的功能。 它提供了获取一维、二维和三维插值的有用函数。

我们需要知道如何在 Python 中安装 SciPy 库才能继续。

要安装 SciPy,请转到命令行界面并键入以下命令。

pip install scipy

成功安装后,我们可以使用 import 关键字将其导入到我们的 Python 程序中。


在 Python 中使用 SciPy 的 interpn() 方法进行 3D 插值

我们可以使用 SciPy 库的 interpn() 方法执行 3D 插值。 这意味着我们可以借助这种方法找到三个或更高的维度。

interpn() 函数的语法:

scipy.interpolate.interpn(points, values, xi, method='linear', bounds_error=True, fill_value=nan)

interpn() 函数的参数:

  1. points:浮点数的元组,具有形状(m1,),...,(mn,)。

    通过这些点定义了一个 n 维的规则网格。 每个维度中的点(即点元组的每个元素)必须严格升序或降序。

  2. values:类似数组,形状 (m1,...,mn,...)。

    数据在 n 维的规则网格上。 复杂的数据是可以接受的。

  3. xi :形状为 (…,ndim) 的 ndarray。

    这是对网格化数据进行采样的坐标所在的位置。

  4. method:str,可选

    插值方法有线性、最近和 splinef2d。 splinef2d 仅支持二维数据。

  5. bounds_error:bool,可选

    如果为真,则当从输入数据域外部请求插值时,将引发 ValueError。 如果为假,则使用 fill_value。

  6. fill_value:数字,可选

    如果我们提供一个数字,函数可以使用插值域之外的点; 如果没有,则外推域外的值。 splinef2d 方法不支持外推。

interpn() 方法返回 values_x: ndarray, shape xi.shape[:-1] + values.shape[ndim:]。 插值 values.ndarray 是一个多维容器,其中每个维度的形状长度和 ndim 是维度数。

现在我们已经了解了 interpn() 函数及其参数。 让我们举一个实际的例子。

在此示例中,我们将三个参数传递给 interpn() 方法。

示例代码:

# import libraries
from scipy.interpolate import interpn
import numpy as np

# define a function to get the value
def v_function_3d(x, y, z):
    return 3 * x + 4 * y - z

# the np.linspace() function returns the interval between the given numbers.
x = np.linspace(0, 4, 5)
y = np.linspace(0, 5, 6)
z = np.linspace(0, 6, 7)

# in three dimensions, a point's coordinates are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
values = v_function_3d(*np.meshgrid(*points, indexing='ij'))

# coordinates to sample the gridded data are
point = np.array([2.21, 3.12, 1.15])

# evaluate the 3d interpolating function at a point
print(interpn(points, values, point))

输出:

[17.96]

在 Python 中使用 RegularGridInterpolator 进行 3D 插值

使用 RegularGridInterpolator 类在任意维数的规则或直线网格上进行插值。

定义数据需要直线网格或具有规则或不均匀间距的矩形网格。 它支持线性、最近邻和样条插值。

我们可以在设置插值器对象后选择一种插值方法。

我们在线性插值周围的网格点进行插值时使用RegularGridInterpolator。 以规则间隔输入数据。

下面的例子解释了如何使用 RegularGridInterpolator 进行插值。

# import libraries
import scipy.interpolate as reg_grid
import numpy as np

# define a function to get value
def v_function_3d(x, y, z):
    return 2 * x + 3 * y - z

# define an interpolating function
RGI = reg_grid.RegularGridInterpolator

#arrays constituting the 3d grid
x = np.linspace(0, 50, 50)
y = np.linspace(0, 50, 50)
z = np.linspace(0, 50, 50)

# in three dimensions, a point is a number (coordinates) that are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
vals = v_function_3d(*np.meshgrid(*points, indexing='ij'))

# make the interpolator
rgi = RGI(points , values=vals)
pnt = (2.5, 3.5, 1.5)
print (rgi(pnt))

输出:

13.999999999999998

总结

我们可以在 scipy 库及其方法 interpn() 或 RegularGridInterpolator 的帮助下在 Python 中使用 3D 插值。 我们可以轻松地进行预测、数据分析和许多其他应用。

插值可帮助用户确定在收集的数据之外可能存在哪些数据。

上一篇:在 Python 中重新抛出异常

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中重新抛出异常

发布时间:2023/06/13 浏览次数:53 分类:Python

Python 为我们提供了 try-except 块来处理程序中的异常。 它还为我们提供了 raise 语句来手动抛出异常。本文将讨论如何在 Python 程序中重新抛出异常。在 Python 中抛出异常

Python 模拟引发异常

发布时间:2023/06/13 浏览次数:160 分类:Python

本文的主要目的是演示如何在使用单元测试库 unittest 时抛出异常。在 Python 中使用单元测试库 unittest 时抛出异常

Python打开文件异常处理

发布时间:2023/06/13 浏览次数:146 分类:Python

要打开文件,Python 有一个名为 open() 的内置函数,用户可以通过它读取或写入文件,但是如果在任何情况下文件丢失或编译器无法访问,那么,我们 遇到 FileNotFoundError。 本文将介绍如何处理

Python 绘图 CSV

发布时间:2023/06/13 浏览次数:67 分类:Python

CSV 代表逗号分隔值,一种存储结构化数据的流行格式。 CSV 文件包含具有行和列的表格形式的数据。我们经常需要可视化存储在 CSV 文件中的数据。 为此,Python 提供了不同类型的数据可视化图

Python 绘制决策边界

发布时间:2023/06/13 浏览次数:52 分类:Python

为此,我们将使用 Sklearn 库提供的内置预处理数据(无缺失数据或异常值)数据集包来绘制数据的决策边界。 然后我们将使用 Matplotlib 的库来绘制决策边界。

Python 中的 Soundex

发布时间:2023/06/13 浏览次数:184 分类:Python

Python 的 soundex 函数是将文本字符串转换为 Soundex 代码的函数。 它有助于在数据库中索引名称或查找相似名称。名字的 Soundex 代码是基于它的发音,而不是它的拼写。 它是比较发音不同但拼写准

Python 读取 Outlook 电子邮件

发布时间:2023/06/13 浏览次数:170 分类:Python

本文将讨论如何借助 win32com.client 模块从 outlook 应用程序读取电子邮件。 我们还学习了如何在 Python 中过滤具有不同属性的电子邮件。使用 win32com.client 模块从 Outlook 应用程序读取电子邮件

Python 多处理日志记录

发布时间:2023/06/13 浏览次数:150 分类:Python

本文将讨论 multiprocessing 的概念。 在此之后,我们将讨论 Python 中的多处理和使用 Python 代码进行多处理的日志处理。

Python multiprocessing 共享对象

发布时间:2023/06/13 浏览次数:81 分类:Python

在 Python 中,共享内存多处理由连接多个处理器组成,但这些处理器必须能够直接访问系统的主内存。 这将允许所有连接的处理器访问它们使用或创建的其他处理器数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便