迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 插值。 我们可以轻松地进行预测、数据分析和许多其他应用。

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

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

本文地址:

相关文章

Python 中的 Pandas 插入方法

发布时间:2024/04/23 浏览次数:112 分类:Python

本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。

Pandas 重命名多个列

发布时间:2024/04/22 浏览次数:199 分类:Python

本教程演示了如何使用 Pandas 重命名数据框中的多个列。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便