Python 中的 3D 插值
插值是在离散集的定义范围内构造新数据点的方法。 插值意味着找到点或曲线之间的值。
从数学的角度来看,插值是获取位于其他已知数据点之间的特定未知数据点的值。
插值的重要性
插值是进行预测、数据分析和许多其他应用的强大工具。 它预测地理相关数据的未知值,例如噪音水平、降雨量、海拔等。
插值有很多用途。 在机器学习 (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() 函数的参数:
-
points:浮点数的元组,具有形状(m1,),...,(mn,)。
通过这些点定义了一个 n 维的规则网格。 每个维度中的点(即点元组的每个元素)必须严格升序或降序。
-
values:类似数组,形状 (m1,...,mn,...)。
数据在 n 维的规则网格上。 复杂的数据是可以接受的。
-
xi :形状为 (…,ndim) 的 ndarray。
这是对网格化数据进行采样的坐标所在的位置。
-
method:str,可选
插值方法有线性、最近和 splinef2d。 splinef2d 仅支持二维数据。
-
bounds_error:bool,可选
如果为真,则当从输入数据域外部请求插值时,将引发 ValueError。 如果为假,则使用 fill_value。
-
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 中重新抛出异常
发布时间: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 中,共享内存多处理由连接多个处理器组成,但这些处理器必须能够直接访问系统的主内存。 这将允许所有连接的处理器访问它们使用或创建的其他处理器数据。