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