scipy.interpolate.BSpline.
design_matrix#
- classmethod BSpline.design_matrix(x, t, k, extrapolate=False)[source]#
返回 CSR 格式稀疏陣列的設計矩陣。
- 參數:
- xarray_like, shape (n,)
在這些點評估樣條函數。
- tarray_like, shape (nt,)
已排序的一維節點陣列。
- kint
B-spline 次數。
- extrapolatebool 或 ‘periodic’, optional
是否基於第一個和最後一個區間進行外推,或引發錯誤。如果為 ‘periodic’,則使用週期性外推。預設值為 False。
在 1.10.0 版本中新增。
- 返回:
- design_matrixcsr_array object
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-spline 建構設計矩陣
>>> 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