scipy.interpolate.PPoly.

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 splrep oder 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 von splprep oder einer BSpline mit c.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 c eine 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 PPoly zusammenfü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