Метод экстраполяции scipy interp1d fill_value = кортеж не работает

Я хочу экстраполировать подгонку функции. Предполагается, что scipy.interpolate.interp1d может это сделать (см. фрагмент документа). Вместо этого я получаю «ValueError: значение в x_new ниже диапазона интерполяции».

Использование: python 2.7.12, numpy 1.13.3, scipy 0.19.1

fill_value : массив-подобный или (массив-подобный, array_like) или "экстраполировать", необязательный - если ndarray (или плавающий), это значение будет использоваться для заполнения запрошенных точек за пределами диапазона данных. Если не указано, по умолчанию используется NaN. Подобное массиву должно правильно транслироваться в размеры осей без интерполяции. - Если кортеж состоит из двух элементов, то первый элемент используется как значение заполнения для x_new < x[0], а второй элемент используется для x_new > x[-1]. Все, что не является двухэлементным кортежем (например, список или ndarray, независимо от формы), рассматривается как один аргумент, подобный массиву, предназначенный для использования для обеих границ как below, above = fill_value, fill_value.

import numpy as np
from scipy.interpolate import interp1d
# make a time series
nobs = 10
t = np.sort(np.random.random(nobs))
x = np.random.random(nobs)
# compute linear interp (with ability to extrapolate too)
f1 = interp1d(t, x, kind='linear', fill_value='extrapolate') # this works
f2 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6)) # this doesn't

person John Mahoney    schedule 21.10.2017    source источник


Ответы (1)


Согласно документации, interp1d по умолчанию увеличивает ValueError при экстраполяции, за исключением случаев, когда fill_value='extrapolate' или когда вы указываете bounds_error=False.

In [1]: f1 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6), bounds_error=False)

In [2]: f1(0)
Out[2]: array(0.5)
person Craig    schedule 21.10.2017
comment
Спасибо, Крейг. Я предположил, что предоставление значения кортежа для fill_value приведет к его использованию (возможно, если вы также явно не установили bounds_error=False по какой-либо причине). Очевидно, это не поведение interp1d. - person John Mahoney; 22.10.2017