Я пытаюсь перенести программу, которая использует ручной ролл-интерполятор (разработанный математиком-коллегой) для использования интерполяторов, предоставляемых scipy. Я хотел бы использовать или обрезать scipy-интерполятор так, чтобы он был как можно ближе к старому интерполятору.
Ключевое различие между двумя функциями заключается в том, что в нашем исходном интерполяторе - если входное значение выше или ниже диапазона ввода, наш исходный интерполятор экстраполирует результат. Если вы попробуете это с помощью scipy-интерполятора, он поднимает значение ValueError
. Рассмотрим эту программу как пример:
import numpy as np
from scipy import interpolate
x = np.arange(0,10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
print f(9)
print f(11) # Causes ValueError, because it greater than max(x)
Есть ли разумный способ сделать так, чтобы вместо сбоя конечная строка просто выполнила линейную экстраполяцию, продолжая градиенты, определяемые первой и последней двумя точками до бесконечности.
Обратите внимание, что в реальном программном обеспечении я фактически не использую функцию exp - это только для иллюстрации!