scipy.interpolate.BSpline.

design_matrix#

метод класса BSpline.design_matrix(x, t, k, экстраполяция=False)[источник]#

Возвращает матрицу плана в виде разреженного массива в формате CSR.

Параметры:
xarray_like, форма (n,)

Точки, в которых вычисляется сплайн.

tarray_like, форма (nt,)

Отсортированный одномерный массив узлов.

kint

Степень B-сплайна.

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

Экстраполировать на основе первого и последнего интервалов или вызывать ошибку. Если 'periodic', используется периодическая экстраполяция. По умолчанию False.

Добавлено в версии 1.10.0.

Возвращает:
design_matrixcsr_array object

Разреженная матрица в формате CSR, где каждая строка содержит все базисные элементы входной строки (первая строка = базисные элементы x[0], ..., последняя строка = базисные элементы x[-1]).

Примечания

Добавлено в версии 1.8.0.

В каждой строке матрицы плана все базисные элементы вычисляются в определенной точке (первая строка - x[0], …, последняя строка - x[-1]).

nt представляет собой длину вектора узлов: поскольку существует nt - k - 1 базисные элементы, nt должно быть не меньше 2 * k + 2 иметь как минимум k + 1 базисный элемент.

Выход за границы x вызывает ValueError.

Примеры

Построить матрицу плана для B-сплайна

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

Построить матрицу плана для некоторого вектора узлов

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

Этот результат эквивалентен созданному в разреженном формате

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