LSQSphereBivariateSpline#
- класс scipy.interpolate.LSQSphereBivariateSpline(theta, phi, r, tt, tp, w=None, eps=1e-16)[источник]#
(0.0,
Определяет сглаживающий бикубический сплайн в соответствии с заданным набором узлов в theta и phi направления.
Добавлено в версии 0.11.0.
- Параметры:
- theta, phi, rarray_like
1-D последовательности точек данных (порядок не важен). Координаты должны быть заданы в радианах. Тета должна лежать в интервале
[0, pi], и phi должен лежать в интервале[0, 2pi].- tt, tparray_like
Строго упорядоченные 1-D последовательности координат узлов. Координаты должны удовлетворять
0 < tt[i] < pi,0 < tp[i] < 2*pi.- warray_like, необязательный
Положительная 1-D последовательность весов той же длины, что и theta, phi и r.
- epsfloat, опционально
Порог для определения эффективного ранга переопределённой системы линейных уравнений. eps должен иметь значение в открытом интервале
(0, 1), по умолчанию равно 1e-16.
Методы
__call__(theta, phi[, dtheta, dphi, grid])Вычисление сплайна или его производных в заданных позициях.
ev(theta, phi[, dtheta, dphi])Вычислить сплайн в точках
Вернуть коэффициенты сплайна.
Возвращает кортеж (tx,ty), где tx,ty содержат позиции узлов сплайна относительно переменных x и y соответственно.
Возвращает взвешенную сумму квадратов невязок аппроксимации сплайном: sum ((w[i]*(z[i]-s(x[i],y[i])))**2,axis=0)
partial_derivative(dx, dy)Построить новый сплайн, представляющий частную производную этого сплайна.
Смотрите также
BivariateSplineбазовый класс для двумерных сплайнов.
UnivariateSplineгладкий одномерный сплайн для аппроксимации заданного набора точек данных.
SmoothBivariateSplineсглаживающий двумерный сплайн через заданные точки
LSQBivariateSplineдвумерный сплайн с использованием взвешенного метода наименьших квадратов
RectSphereBivariateSplineдвумерный сплайн по прямоугольной сетке на сфере
SmoothSphereBivariateSplineсглаживающий двумерный сплайн в сферических координатах
RectBivariateSplineдвумерный сплайн на прямоугольной сетке.
bisplrepфункция для нахождения бивариантного B-сплайнового представления поверхности
bisplevфункция для вычисления двумерного B-сплайна и его производных
Примечания
Для получения дополнительной информации см. FITPACK сайт об этой функции.
Примеры
Предположим, у нас есть глобальные данные на грубой сетке (входные данные не обязательно должны быть на сетке):
>>> from scipy.interpolate import LSQSphereBivariateSpline >>> import numpy as np >>> import matplotlib.pyplot as plt
>>> theta = np.linspace(0, np.pi, num=7) >>> phi = np.linspace(0, 2*np.pi, num=9) >>> data = np.empty((theta.shape[0], phi.shape[0])) >>> data[:,0], data[0,:], data[-1,:] = 0., 0., 0. >>> data[1:-1,1], data[1:-1,-1] = 1., 1. >>> data[1,1:-1], data[-2,1:-1] = 1., 1. >>> data[2:-2,2], data[2:-2,-2] = 2., 2. >>> data[2,2:-2], data[-3,2:-2] = 2., 2. >>> data[3,3:-2] = 3. >>> data = np.roll(data, 4, 1)
Нам нужно настроить объект интерполятора. Здесь мы также должны указать координаты используемых узлов.
>>> lats, lons = np.meshgrid(theta, phi) >>> knotst, knotsp = theta.copy(), phi.copy() >>> knotst[0] += .0001 >>> knotst[-1] -= .0001 >>> knotsp[0] += .0001 >>> knotsp[-1] -= .0001 >>> lut = LSQSphereBivariateSpline(lats.ravel(), lons.ravel(), ... data.T.ravel(), knotst, knotsp)
В качестве первого теста посмотрим, что возвращает алгоритм при запуске на входных координатах
>>> data_orig = lut(theta, phi)
Наконец, мы интерполируем данные на более мелкую сетку
>>> fine_lats = np.linspace(0., np.pi, 70) >>> fine_lons = np.linspace(0., 2*np.pi, 90) >>> data_lsq = lut(fine_lats, fine_lons)
>>> fig = plt.figure() >>> ax1 = fig.add_subplot(131) >>> ax1.imshow(data, interpolation='nearest') >>> ax2 = fig.add_subplot(132) >>> ax2.imshow(data_orig, interpolation='nearest') >>> ax3 = fig.add_subplot(133) >>> ax3.imshow(data_lsq, interpolation='nearest') >>> plt.show()