cupyx.scipy.interpolate.interpn#

cupyx.scipy.interpolate.interpn(points, values, xi, method='linear', bounds_error=True, fill_value=nan)[source]#

在规则或直线网格上的多维插值。

严格来说,并非所有规则网格都支持 - 此函数作用于直线网格,即间隔均匀或不均匀的矩形网格。

参数:
  • points (tuple of cupy.ndarray of float, 形状为 (m1,), ..., (mn,)) – 定义n维规则网格的点。每个维度的点(即points元组的每个元素)必须是严格递增或递减的。

  • values (cupy.ndarray, 形状为 (m1, ..., mn, ...)) – n维规则网格上的数据。可以接受复数数据。

  • xi (cupy.ndarray, 形状为 (..., ndim)) – 对网格数据进行采样时使用的坐标。

  • method (str, 可选) – 执行插值的方法。支持的方法有“linear”、“nearest”、“slinear”、“cubic”、“quintic”和“pchip”。

  • bounds_error (bool, 可选) – 如果为True,当请求插值值超出输入数据域时,将引发ValueError。如果为False,则使用fill_value

  • fill_value (number, 可选) – 如果提供,则用于插值域外的值。如果为None,则对域外的值进行外插。

返回值:

values_x – 在 xi 处的插值值。有关 xi.ndim == 1 时的行为,请参阅注释。

返回类型:

ndarray, 形状为 xi.shape[:-1] + values.shape[ndim:]

注释

xi.ndim == 1 的情况下,返回数组 values_x 的 0 位置会插入一个新轴,因此其形状将是 (1,) + values.shape[ndim:]

如果输入数据的维度单位不一致且数量级差异很大,插值结果可能会出现数值伪影。考虑在插值前对数据进行缩放。

示例

在规则三维网格的点上评估一个简单的示例函数

>>> import cupy as cp
>>> from cupyx.scipy.interpolate import interpn
>>> def value_func_3d(x, y, z):
...     return 2 * x + 3 * y - z
>>> x = cp.linspace(0, 4, 5)
>>> y = cp.linspace(0, 5, 6)
>>> z = cp.linspace(0, 6, 7)
>>> points = (x, y, z)
>>> values = value_func_3d(*cp.meshgrid(*points, indexing='ij'))

在一个点上评估插值函数

>>> point = cp.array([2.21, 3.12, 1.15])
>>> print(interpn(points, values, point))
[12.63]

另请参阅

RegularGridInterpolator

在任意维度的规则或直线网格上进行插值 (interpn 包装了这个类)。

cupyx.scipy.ndimage.map_coordinates

在等间距网格上进行插值 (适用于例如 N维图像重采样)