scipy.interpolate.BSpline.

设计矩阵#

classmethod BSpline.design_matrix(x, t, k, extrapolate=False)[源代码][源代码]#

返回一个以 CSR 格式稀疏数组表示的设计矩阵。

参数:
x类数组, 形状 (n,)

要评估样条的点。

tarray_like, 形状 (nt,)

排序后的 1D 节点数组。

k整数

B样条度数。

外推布尔值或 ‘periodic’,可选

是否基于第一个和最后一个区间进行外推或引发错误。如果为 ‘periodic’,则使用周期性外推。默认是 False。

Added in version 1.10.0.

返回:
design_matrix : csr_array 对象csr_array 对象

CSR 格式的稀疏矩阵,其中每一行包含输入行的所有基元素(第一行 = x[0] 的基元素,…,最后一行 = x[-1] 的基元素)。

注释

Added in version 1.8.0.

在设计矩阵的每一行中,所有基元素都在某个特定点进行评估(第一行 - x[0],…,最后一行 - x[-1])。

nt 是节点向量的长度:只要存在 nt - k - 1 个基元素,nt 应该不少于 2 * k + 2 以至少有 k + 1 个基元素。

超出界限的 x 会引发 ValueError。

示例

构建一个B样条的设计矩阵

>>> from scipy.interpolate import make_interp_spline, BSpline
>>> import numpy as np
>>> x = np.linspace(0, np.pi * 2, 4)
>>> y = np.sin(x)
>>> k = 3
>>> bspl = make_interp_spline(x, y, k=k)
>>> design_matrix = bspl.design_matrix(x, bspl.t, k)
>>> design_matrix.toarray()
[[1.        , 0.        , 0.        , 0.        ],
[0.2962963 , 0.44444444, 0.22222222, 0.03703704],
[0.03703704, 0.22222222, 0.44444444, 0.2962963 ],
[0.        , 0.        , 0.        , 1.        ]]

为一些结点向量构建设计矩阵

>>> k = 2
>>> t = [-1, 0, 1, 2, 3, 4, 5, 6]
>>> x = [1, 2, 3, 4]
>>> design_matrix = BSpline.design_matrix(x, t, k).toarray()
>>> design_matrix
[[0.5, 0.5, 0. , 0. , 0. ],
[0. , 0.5, 0.5, 0. , 0. ],
[0. , 0. , 0.5, 0.5, 0. ],
[0. , 0. , 0. , 0.5, 0.5]]

此结果等同于在稀疏格式中创建的结果

>>> c = np.eye(len(t) - k - 1)
>>> design_matrix_gh = BSpline(t, c, k)(x)
>>> np.allclose(design_matrix, design_matrix_gh, atol=1e-14)
True