SmoothSphereBivariateSpline#
- класс scipy.interpolate.SmoothSphereBivariateSpline(theta, phi, r, w=None, s=0.0, eps=1e-16)[источник]#
Сглаженная бивариативная сплайн-аппроксимация в сферических координатах.
Добавлено в версии 0.11.0.
- Параметры:
- theta, phi, rarray_like
1-D последовательности точек данных (порядок не важен). Координаты должны быть заданы в радианах. Тета должна лежать в интервале
[0, pi], и phi должен лежать в интервале[0, 2pi].- warray_like, необязательный
Положительная 1-D последовательность весов.
- sfloat, опционально
Положительный коэффициент сглаживания, определенный для условия оценки:
sum((w(i)*(r(i) - s(theta(i), phi(i))))**2, axis=0) <= sПо умолчаниюs=len(w)что должно быть хорошим значением, если1/w[i]является оценкой стандартного отклоненияr[i].- 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двумерный сплайн по прямоугольной сетке на сфере
LSQSphereBivariateSplineдвумерный сплайн в сферических координатах с использованием взвешенного метода наименьших квадратов
RectBivariateSplineдвумерный сплайн на прямоугольной сетке.
bisplrepфункция для нахождения бивариантного B-сплайнового представления поверхности
bisplevфункция для вычисления двумерного B-сплайна и его производных
Примечания
Для получения дополнительной информации см. FITPACK сайт об этой функции.
Примеры
Предположим, у нас есть глобальные данные на грубой сетке (входные данные не обязательно должны быть на сетке):
>>> import numpy as np >>> theta = np.linspace(0., np.pi, 7) >>> phi = np.linspace(0., 2*np.pi, 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) >>> from scipy.interpolate import SmoothSphereBivariateSpline >>> lut = SmoothSphereBivariateSpline(lats.ravel(), lons.ravel(), ... data.T.ravel(), s=3.5)
В качестве первого теста посмотрим, что возвращает алгоритм при запуске на входных координатах
>>> data_orig = lut(theta, phi)
Наконец, мы интерполируем данные на более мелкую сетку
>>> fine_lats = np.linspace(0., np.pi, 70) >>> fine_lons = np.linspace(0., 2 * np.pi, 90)
>>> data_smth = lut(fine_lats, fine_lons)
>>> import matplotlib.pyplot as plt >>> 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_smth, interpolation='nearest') >>> plt.show()