numpy.interp#

numpy.interp(x, xp, fp, left=None, правый=None, период=None)[источник]#

Одномерная линейная интерполяция для монотонно возрастающих точек выборки.

Возвращает одномерный кусочно-линейный интерполянт для функции с заданными дискретными точками данных (xp, fp), вычисленный в x.

Параметры:
xarray_like

Координаты x, в которых нужно вычислить интерполированные значения.

xp1-D последовательность чисел с плавающей точкой

X-координаты точек данных должны возрастать, если аргумент период не указано. В противном случае, xp внутренне отсортирован после нормализации периодических границ с xp = xp % period.

fp1-D последовательность float или complex

Y-координаты точек данных, той же длины, что и xp.

leftопциональное float или complex, соответствующее fp

Значение для возврата x < xp[0], по умолчанию fp[0].

правыйопциональное float или complex, соответствующее fp

Значение для возврата x > xp[-1], по умолчанию fp[-1].

периодNone или float, опционально

Период для x-координат. Этот параметр позволяет правильную интерполяцию угловых x-координат. Параметры left и правый игнорируются, если период указан.

Возвращает:
yfloat или complex (соответствует fp) или ndarray

Интерполированные значения, той же формы, что и x.

Вызывает:
ValueError

Если xp и fp имеют разную длину Если xp или fp не являются 1-D последовательностями Если период == 0

Предупреждение

Ожидается, что последовательность x-координат будет возрастающей, но это не проверяется явно. Однако, если последовательность xp не возрастает, результаты интерполяции бессмысленны.

Обратите внимание, что, поскольку NaN не сортируется, xp также не могут содержать NaN.

Простая проверка для xp строго возрастает:

np.all(np.diff(xp) > 0)

Смотрите также

scipy.interpolate

Примеры

>>> import numpy as np
>>> xp = [1, 2, 3]
>>> fp = [3, 2, 0]
>>> np.interp(2.5, xp, fp)
1.0
>>> np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp)
array([3.  , 3.  , 2.5 , 0.56, 0.  ])
>>> UNDEF = -99.0
>>> np.interp(3.14, xp, fp, right=UNDEF)
-99.0

Постройте интерполянт для функции синуса:

>>> x = np.linspace(0, 2*np.pi, 10)
>>> y = np.sin(x)
>>> xvals = np.linspace(0, 2*np.pi, 50)
>>> yinterp = np.interp(xvals, x, y)
>>> import matplotlib.pyplot as plt
>>> plt.plot(x, y, 'o')
[]
>>> plt.plot(xvals, yinterp, '-x')
[]
>>> plt.show()
../../_images/numpy-interp-1_00_00.png

Интерполяция с периодическими x-координатами:

>>> x = [-180, -170, -185, 185, -10, -5, 0, 365]
>>> xp = [190, -190, 350, -350]
>>> fp = [5, 10, 3, 4]
>>> np.interp(x, xp, fp, period=360)
array([7.5 , 5.  , 8.75, 6.25, 3.  , 3.25, 3.5 , 3.75])

Комплексная интерполяция:

>>> x = [1.5, 4.0]
>>> xp = [2,3,5]
>>> fp = [1.0j, 0, 2+3j]
>>> np.interp(x, xp, fp)
array([0.+1.j , 1.+1.5j])