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 pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。