from_spline#
- classmethod PPoly.from_spline(tck, extrapolate=None)[Quelle]#
Erstellt ein stückweise definiertes Polynom aus einer Spline
- Parameter:
- tck
Eine Spline, wie sie von
splrepoder einem BSpline-Objekt zurückgegeben wird.- extrapolatebool oder ‘periodic’, optional
Wenn bool, bestimmt, ob für Punkte außerhalb des Bereichs basierend auf dem ersten und letzten Intervall extrapoliert wird oder ob NaNs zurückgegeben werden. Wenn ‘periodic’, wird periodische Extrapolation verwendet. Standard ist True.
Beispiele
Erstellt eine interpolierende Spline und konvertiert sie in eine
PPoly-Instanz>>> import numpy as np >>> from scipy.interpolate import splrep, PPoly >>> x = np.linspace(0, 1, 11) >>> y = np.sin(2*np.pi*x) >>> tck = splrep(x, y, s=0) >>> p = PPoly.from_spline(tck) >>> isinstance(p, PPoly) True
Beachten Sie, dass diese Funktion standardmäßig nur 1D-Splines unterstützt.
Wenn das
tck-Objekt eine parametrische Spline darstellt (z. B. erstellt vonsplprepoder einerBSplinemitc.ndim > 1), müssen Sie die Dimensionen manuell durchlaufen.>>> from scipy.interpolate import splprep, splev >>> t = np.linspace(0, 1, 11) >>> x = np.sin(2*np.pi*t) >>> y = np.cos(2*np.pi*t) >>> (t, c, k), u = splprep([x, y], s=0)
Beachten Sie, dass
ceine Liste von zwei Arrays mit der Länge 11 ist.>>> unew = np.arange(0, 1.01, 0.01) >>> out = splev(unew, (t, c, k))
Um diese Spline in die Potenzbasis zu konvertieren, konvertieren wir jede Komponente der Liste der B-Spline-Koeffizienten,
c, in das entsprechende kubische Polynom.>>> polys = [PPoly.from_spline((t, cj, k)) for cj in c] >>> polys[0].c.shape (4, 14)
Beachten Sie, dass die Koeffizienten der Polynome polys in der Potenzbasis vorliegen und ihre Dimensionen dies widerspiegeln: hier ist 4 die Ordnung (Grad+1) und 14 ist die Anzahl der Intervalle – was nichts anderes ist als die Länge des Knotenarrays der ursprünglichen tck minus eins.
Optional können wir die Komponenten entlang der dritten Dimension zu einer einzigen
PPolyzusammenfügen>>> cc = np.dstack([p.c for p in polys]) # has shape = (4, 14, 2) >>> poly = PPoly(cc, polys[0].x) >>> np.allclose(poly(unew).T, # note the transpose to match `splev` ... out, atol=1e-15) True