scipy.interpolate.SmoothBivariateSpline.

__call__#

SmoothBivariateSpline.__call__(x, y, dx=0, dy=0, сетка=True)[источник]#

Вычисление сплайна или его производных в заданных позициях.

Параметры:
x, yarray_like

Входные координаты.

Если сетка равно False, вычислить сплайн в точках (x[i], y[i]), i=0, ..., len(x)-1. Стандартное правило вещания Numpy соблюдается.

Если сетка равен True: вычисляет сплайн в точках сетки, определённых координатными массивами x, y. Массивы должны быть отсортированы по возрастанию.

Порядок осей согласован с np.meshgrid(..., indexing="ij") и несовместимо с порядком по умолчанию np.meshgrid(..., indexing="xy").

dxint

Порядок производной по x

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

dyint

Порядок производной по y

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

сеткаbool

Оценивать ли результаты на сетке, порождённой входными массивами, или в точках, заданных входными массивами.

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

Примеры

Предположим, что мы хотим билинейно интерполировать экспоненциально затухающую функцию в 2 измерениях.

>>> import numpy as np
>>> from scipy.interpolate import RectBivariateSpline

Мы сэмплируем функцию на грубой сетке. Обратите внимание, что индексирование по умолчанию=”xy” в meshgrid приведёт к неожиданному (транспонированному) результату после интерполяции.

>>> xarr = np.linspace(-3, 3, 100)
>>> yarr = np.linspace(-3, 3, 100)
>>> xgrid, ygrid = np.meshgrid(xarr, yarr, indexing="ij")

Функция интерполяции убывает быстрее по одной оси, чем по другой.

>>> zdata = np.exp(-np.sqrt((xgrid / 2) ** 2 + ygrid**2))

Далее мы выполняем выборку на более мелкой сетке с использованием интерполяции (kx=ky=1 для билинейной).

>>> rbs = RectBivariateSpline(xarr, yarr, zdata, kx=1, ky=1)
>>> xarr_fine = np.linspace(-3, 3, 200)
>>> yarr_fine = np.linspace(-3, 3, 200)
>>> xgrid_fine, ygrid_fine = np.meshgrid(xarr_fine, yarr_fine, indexing="ij")
>>> zdata_interp = rbs(xgrid_fine, ygrid_fine, grid=False)

И проверить, что результат совпадает с входными данными, построив график обоих.

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(1, 2, 1, aspect="equal")
>>> ax2 = fig.add_subplot(1, 2, 2, aspect="equal")
>>> ax1.imshow(zdata)
>>> ax2.imshow(zdata_interp)
>>> plt.show()
../../_images/scipy-interpolate-SmoothBivariateSpline-__call__-1.png