scipy.interpolate.CubicHermiteSpline.

from_spline#

метод класса CubicHermiteSpline.from_spline(tck, экстраполяция=None)[источник]#

Построение кусочно-полиномиальной функции из сплайна

Параметры:
tck

Сплайн, возвращаемый splrep или объект BSpline.

экстраполяцияbool или 'periodic', опционально

Если bool, определяет, следует ли экстраполировать на точки вне границ на основе первого и последнего интервалов или возвращать NaN. Если 'periodic', используется периодическая экстраполяция. По умолчанию True.

Примеры

Построить интерполирующий сплайн и преобразовать его в PPoly экземпляр

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

Обратите внимание, что эта функция изначально поддерживает только 1D сплайны.

Если tck объект представляет параметрический сплайн (например, построенный с помощью splprep или BSpline с c.ndim > 1), вам потребуется вручную перебирать измерения.

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

Обратите внимание, что c это список из двух массивов длиной 11.

>>> unew = np.arange(0, 1.01, 0.01)
>>> out = splev(unew, (t, c, k))

Чтобы преобразовать этот сплайн в степенной базис, мы преобразуем каждый компонент списка коэффициентов b-сплайна, c, в соответствующий кубический полином.

>>> polys = [PPoly.from_spline((t, cj, k)) for cj in c]
>>> polys[0].c.shape
(4, 14)

Обратите внимание, что коэффициенты полиномов polys находятся в степенном базисе, и их размерности отражают именно это: здесь 4 — порядок (степень+1), а 14 — количество интервалов, что является длиной массива узлов исходного tck минус один.

При необходимости мы можем объединить компоненты в единый PPoly вдоль третьего измерения:

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