Я пытаюсь перенести программу, которая использует ручной интерполятор (разработанный коллегой математиков), чтобы использовать интерполяторы, предоставленные 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's greater than max(x)
Есть ли разумный способ сделать так, чтобы вместо сбоя последняя строка просто выполняла линейную экстраполяцию, продолжая градиенты, определенные первой и последней двумя точками, до бесконечности.
Обратите внимание, что в реальном программном обеспечении я фактически не использую функцию exp - это здесь только для иллюстрации!
scipy.interpolate.UnivariateSpline
кажется, экстраполирует без проблем.