numpy.interp
-
numpy.interp(x, xp, fp, left=None, right=None, period=None)[source] -
Линейная интерполяция в одномерном случае.
Возвращает одномерный кусочно-линейный интерполянт для функции с заданными дискретными точками данных (
xp,fp), вычисленный в точкахx.- Параметры
-
-
xarray_like -
Координаты x, в которых необходимо вычислить интерполированные значения.
-
xp1-D sequence of floats -
Координаты x точек данных, должны быть возрастающими, если аргумент
periodне указан. В противном случае,xpвнутренне сортируется после нормализации периодических границ сxp = xp % period. -
fp1-D sequence of float or complex -
Координаты y точек данных, длина совпадает с длиной
xp. -
leftoptional float or complex corresponding to fp -
Значение, возвращаемое для
x < xp[0], по умолчаниюfp[0]. -
rightoptional float or complex corresponding to fp -
Значение, возвращаемое для
x > xp[-1], по умолчаниюfp[-1]. -
periodNone or float, optional -
Период для координат x. Этот параметр позволяет правильно интерполировать угловые координаты x. Параметры
leftиrightигнорируются, еслиperiodуказан.Введено в версии 1.10.0.
-
- Возвращает
-
-
yfloat or complex (corresponding to fp) or ndarray -
Интерполированные значения, форма совпадает с формой
x.
-
- Возможные исключения
-
- ValueError
-
Если
xpиfpимеют разную длину. Еслиxpилиfpне являются одномерными последовательностями. Еслиperiod == 0
Примечания
Последовательность координат x ожидается возрастающей, но это не проверяется явно. Однако, если последовательность
xpне является возрастающей, результаты интерполяции бессмысленны.Обратите внимание, что, так как NaN не сортируется,
xpтакже не может содержать NaN.Простая проверка на то, что
xpстрого возрастает:np.all(np.diff(xp) > 0)
Примеры
>>> 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') [<matplotlib.lines.Line2D object at 0x...>] >>> plt.plot(xvals, yinterp, '-x') [<matplotlib.lines.Line2D object at 0x...>] >>> plt.show()
Интерполяция с периодическими координатами 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])
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.interp.html