scipy.interpolate.BSpline.design_matrix

classmethod BSpline.design_matrix(x, t, k)[源代码]

返回CSR格式的设计矩阵。

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

要计算样条线的点。

tARRAY_LIKE,Shape(nt,)

已排序的一维节点数组。

k集成

B样条次数。

退货
design_matrixcsr_matrix 对象CSR_矩阵对象

CSR格式的稀疏矩阵,其中每行中的所有基本元素都在特定点(第一行-x)求值 [0] ,.,最后一排-x [-1] )。

注意事项

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
>>> 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