scipy.interpolate.BSpline.

design_matrix#

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

Gibt eine Design-Matrix als Sparse-Array im CSR-Format zurück.

Parameter:
xarray_like, Form (n,)

Punkte, an denen die Spline ausgewertet werden soll.

tarray_like, Form (nt,)

Sortierte 1D-Array von Knoten.

kint

B-Spline-Grad.

extrapolatebool oder ‘periodic’, optional

Ob extrapoliert werden soll, basierend auf dem ersten und letzten Intervall, oder ob ein Fehler ausgelöst werden soll. Wenn ‘periodic’, wird eine periodische Extrapolation verwendet. Standard ist False.

Hinzugefügt in Version 1.10.0.

Rückgabe:
design_matrixcsr_array Objekt

Sparse Matrix im CSR-Format, bei der jede Zeile alle Basiselemente der Eingabezeile enthält (erste Zeile = Basiselemente von x[0], …, letzte Zeile = Basiselemente von x[-1]).

Hinweise

Hinzugefügt in Version 1.8.0.

In jeder Zeile der Design-Matrix werden alle Basiselemente am jeweiligen Punkt ausgewertet (erste Zeile - x[0], …, letzte Zeile - x[-1]).

nt ist die Länge des Knotensvektors: Da es nt - k - 1 Basiselemente gibt, sollte nt nicht kleiner als 2 * k + 2 sein, um mindestens k + 1 Basiselement zu haben.

Außerhalb des Bereichs von x löst einen ValueError aus.

Beispiele

Konstruiere eine Design-Matrix für einen 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.        ]]

Konstruiere eine Design-Matrix für einen gegebenen Knotensvektor

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

Dieses Ergebnis ist äquivalent zu dem im Sparse-Format erstellten

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