scipy.interpolate.

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

Вычислить сплайн в точках

get_coeffs()

Вернуть коэффициенты сплайна.

get_knots()

Возвращает кортеж (tx,ty), где tx,ty содержат позиции узлов сплайна относительно переменных x и y соответственно.

get_residual()

Возвращает взвешенную сумму квадратов невязок аппроксимации сплайном: 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()
../../_images/scipy-interpolate-LSQSphereBivariateSpline-1.png