передача кортежа в fill_value в scipy.interpolate.interp1d приводит к ValueError

документы в scipy.interpolate.interp1d (v0.17.0) говорит следующее для необязательного аргумента fill_value:

fill_value : ... Если кортеж состоит из двух элементов, то первый элемент используется как значение заполнения для x_new ‹ x[0], а второй элемент используется для x_new x[-1].

Таким образом, я передаю двухэлементный кортеж в этом коде:

N=100
x=numpy.arange(N)
y=x*x
interpolator=interp1d(x,y,kind='linear',bounds_error=False,fill_value=(x[0],x[-1]))
r=np.arange(1,70)
interpolator(np.arange(1,70))

Но выдает ValueError:

ValueError: shape mismatch: value array of shape (2,) could not be broadcast to indexing result of shape (0,1)

Может ли кто-нибудь указать мне, что я делаю неправильно здесь? Заранее благодарю за любую помощь.


person jmborr    schedule 04.05.2016    source источник


Ответы (1)


Это ошибка, которая была исправлена ​​в текущей версии dev:

>>> N = 100
>>> x = np.arange(N)
>>> y = x**2
>>> from scipy.interpolate import interp1d
>>> iii = interp1d(x, y, fill_value=(-10, 10), bounds_error=False)
>>> iii(-1)
array(-10.0)
>>> iii(101)
array(10.0)
>>> scipy.__version__
'0.18.0.dev0+8b07439'

При этом, если все, что вам нужно, это линейная интерполяция со значениями заполнения для левой и правой сторон, вы можете использовать np.interp напрямую.

person ev-br    schedule 05.05.2016
comment
Огромное спасибо, а я и не знал о np.interp - person jmborr; 05.05.2016