LSQUnivariateSpline#
- класс scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, ограничивающая рамка=[None, None, k=3, расширение=0, check_finite=False)[источник]#
1-D сплайн с явными внутренними узлами.
Наследие
Этот класс считается устаревшим и больше не будет получать обновления. Хотя в настоящее время у нас нет планов по его удалению, мы рекомендуем, чтобы новый код использовал более современные альтернативы. В частности, мы рекомендуем использовать
make_lsq_splineвместо этого.Аппроксимирует сплайн y = spl(x) степени k к предоставленному x, y data. t определяет внутренние узлы сплайна
- Параметры:
- x(N,) array_like
Размерность входных точек данных – должна быть возрастающей
- y(N,) array_like
Входная размерность точек данных
- t(M,) array_like
внутренние узлы сплайна. Должны быть в порядке возрастания и:
bbox[0] < t[0] < ... < t[-1] < bbox[-1]
- w(N,) array_like, optional
веса для сплайн-аппроксимации. Должны быть положительными. Если None (по умолчанию), все веса равны 1.
- ограничивающая рамка(2,) array_like, необязательный
2-последовательность, задающая границы интервала аппроксимации. Если None (по умолчанию),
bbox = [x[0], x[-1]].- kint, необязательный
Степень сглаживающего сплайна. Должна быть 1 <= k <= 5. По умолчанию k = 3, кубический сплайн.
- расширениеint или str, необязательно
Управляет режимом экстраполяции для элементов, не находящихся в интервале, определенном последовательностью узлов.
если ext=0 или 'extrapolate', вернуть экстраполированное значение.
если ext=1 или ‘zeros’, вернуть 0
если ext=2 или ‘raise’, вызвать ValueError
если ext=3 для ‘const’, вернуть граничное значение.
Значение по умолчанию 0.
- check_finitebool, необязательно
Проверять ли, что входные массивы содержат только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, бесконечному выполнению или бессмысленным результатам), если входные данные содержат бесконечности или NaN. По умолчанию: False.
Методы
__call__(x[, nu, ext])Вычислить сплайн (или его nu-ю производную) в позициях x.
antiderivative([n])Создайте новый сплайн, представляющий первообразную этого сплайна.
derivative([n])Создать новый сплайн, представляющий производную этого сплайна.
derivatives(x)Вернуть все производные сплайна в точке x.
Вернуть коэффициенты сплайна.
Возвращает позиции внутренних узлов сплайна.
Вернуть взвешенную сумму квадратов остатков аппроксимации сплайном.
integral(a, b)Возвращает определенный интеграл сплайна между двумя заданными точками.
roots()Возвращает нули сплайна.
Продолжить вычисление сплайна с заданным коэффициентом сглаживания s и узлами, найденными при последнем вызове.
validate_input
- Вызывает:
- ValueError
Если внутренние узлы не удовлетворяют условиям Шёнберга-Уитни
Смотрите также
UnivariateSplineгладкий одномерный сплайн для аппроксимации заданного набора точек данных.
InterpolatedUnivariateSplineИнтерполирующий одномерный сплайн для заданного набора точек данных.
splrepфункция для нахождения B-сплайнового представления 1-D кривой
splevфункция для оценки B-сплайна или его производных
sprootфункция для нахождения корней кубического B-сплайна
splintфункция для вычисления определённого интеграла B-сплайна между двумя заданными точками
spaldeфункция для вычисления всех производных B-сплайна
Примечания
Количество точек данных должно быть больше степени сплайна k.
Узлы t должны удовлетворять условиям Шёнберга-Уитни, т.е. должно существовать подмножество точек данных
x[j]такой, чтоt[j] < x[j] < t[j+k+1], дляj=0, 1,...,n-k-2.Примеры
>>> import numpy as np >>> from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline >>> import matplotlib.pyplot as plt >>> rng = np.random.default_rng() >>> x = np.linspace(-3, 3, 50) >>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
Подогнать сглаживающий сплайн с предопределенными внутренними узлами:
>>> t = [-1, 0, 1] >>> spl = LSQUnivariateSpline(x, y, t)
>>> xs = np.linspace(-3, 3, 1000) >>> plt.plot(x, y, 'ro', ms=5) >>> plt.plot(xs, spl(xs), 'g-', lw=3) >>> plt.show()
Проверить вектор узлов:
>>> spl.get_knots() array([-3., -1., 0., 1., 3.])
Построение сплайна МНК с использованием узлов другого сплайна:
>>> x = np.arange(10) >>> s = UnivariateSpline(x, x, s=0) >>> s.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.]) >>> knt = s.get_knots() >>> s1 = LSQUnivariateSpline(x, x, knt[1:-1]) # Chop 1st and last knot >>> s1.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.])