scipy.interpolate.BSpline.
design_matrix#
- classmethod BSpline.design_matrix(x, t, k, extrapolate=False)[source]#
返回一个作为 CSR 格式稀疏数组的设计矩阵。
- 参数:
- xarray_like,shape (n,)
要评估样条的点。
- tarray_like,shape (nt,)
排序的 1D 节点数组。
- kint
B 样条度数。
- extrapolatebool 或 ‘periodic’,可选
是否根据第一个和最后一个区间进行外推,或引发错误。如果为 ‘periodic’,则使用周期性外推。默认值为 False。
在版本 1.10.0 中添加。
- 返回值:
- design_matrixcsr_array 对象
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 >>> 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