cupyx.scipy.interpolate.RBFInterpolator#

class cupyx.scipy.interpolate.RBFInterpolator(y, d, neighbors=None, smoothing=0.0, kernel='thin_plate_spline', epsilon=None, degree=None)[source]#

N 维径向基函数 (RBF) 插值。

参数:
  • y ((P, N) array_like) – 数据点坐标。

  • d ((P, ...) array_like) – y 处的数据值。

  • neighbors (int, optional) – 如果指定,插值器在每个评估点的值将仅使用此数量的最近数据点计算。默认使用所有数据点。

  • smoothing (float(P,) array_like, optional) – 平滑参数。当此值设为 0 时,插值器完美拟合数据。对于大值,插值器趋近于具有指定次数的多项式的最小二乘拟合。默认为 0。

  • kernel (str, optional) –

    RBF 的类型。应为以下之一

    • ’linear’ : -r

    • ’thin_plate_spline’ : r**2 * log(r)

    • ’cubic’ : r**3

    • ’quintic’ : -r**5

    • ’multiquadric’ : -sqrt(1 + r**2)

    • ’inverse_multiquadric’ : 1/sqrt(1 + r**2)

    • ’inverse_quadratic’ : 1/(1 + r**2)

    • ’gaussian’ : exp(-r**2)

    默认为 ‘thin_plate_spline’。

  • epsilon (float, optional) – 形状参数,用于缩放 RBF 的输入。如果 kernel 是 ‘linear’、‘thin_plate_spline’、‘cubic’ 或 ‘quintic’,则此参数默认为 1 并可忽略,因为它与缩放平滑参数效果相同。否则,必须指定此参数。

  • degree (int, optional) –

    添加的多项式次数。对于某些 RBF,如果多项式次数太小,插值器可能不是适定的。这些 RBF 及其对应的最小次数为

    • ’multiquadric’ : 0

    • ’linear’ : 0

    • ’thin_plate_spline’ : 1

    • ’cubic’ : 1

    • ’quintic’ : 2

    默认值为 kernel 的最小次数,如果没有最小次数则为 0。设为 -1 表示不添加多项式。

说明

RBF 是一个 N 维空间中的标量值函数,其在点 \(x\) 处的值可以用 \(r=||x - c||\) 表示,其中 \(c\) 是 RBF 的中心。

针对数据值向量 \(d\)(来自于位置 \(y\))的 RBF 插值是中心位于 \(y\) 的 RBF 的线性组合加上指定次数的多项式。RBF 插值表示为

\[f(x) = K(x, y) a + P(x) b,\]

其中 \(K(x, y)\) 是一个矩阵,包含在点 \(x\) 处计算的中心位于 \(y\) 的 RBF;\(P(x)\) 是一个矩阵,包含在点 \(x\) 处计算的单项式(它们构成指定次数的多项式)。系数 \(a\)\(b\) 是线性方程组的解

\[(K(y, y) + \lambda I) a + P(y) b = d\]

\[P(y)^T a = 0,\]

其中 \(\lambda\) 是一个非负平滑参数,控制我们希望数据拟合的程度。当平滑参数为 0 时,数据被精确拟合。

如果满足以下条件,上述系统具有唯一解:

  • \(P(y)\) 必须具有满列秩。当 degree 为 -1 或 0 时,\(P(y)\) 始终具有满列秩。当 degree 为 1 时,如果数据点位置并非完全共线(N=2)、共面(N=3)等,则 \(P(y)\) 具有满列秩。

  • 如果 kernel 是 ‘multiquadric’、‘linear’、‘thin_plate_spline’、‘cubic’ 或 ‘quintic’,则 degree 不能低于上面列出的最小值。

  • 如果 smoothing 为 0,则每个数据点位置必须是唯一的。

当使用非尺度不变的 RBF(‘multiquadric’、‘inverse_multiquadric’、‘inverse_quadratic’ 或 ‘gaussian’)时,必须选择适当的形状参数(例如,通过交叉验证)。形状参数较小的值对应于较宽的 RBF。当形状参数过小时,问题可能会变得病态或奇异。

求解 RBF 插值系数所需的内存随数据点数量呈二次方增长,这在插值超过约一千个数据点时可能变得不切实际。为了克服大型插值问题的内存限制,可以指定 neighbors 参数,以便仅使用最近的数据点计算每个评估点的 RBF 插值。

方法

__call__(x)[source]#

x 处评估插值器。

参数:

x ((Q, N) array_like) – 评估点坐标。

返回:

插值器在 x 处的值。

返回类型:

(Q, …) ndarray

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。