Comment faire de scipy.interpoler donner une extrapolation de résultats au-delà de l'entrée de gamme?

Je suis en train de le port d'un programme qui utilise un roulé à la main de l'interpolateur (développé par un mathématicien collègue) sur l'utilisation de la interpolateurs fournis par scipy. Je voudrais utiliser ou enveloppez la scipy de l'interpolateur de sorte qu'il a d'aussi près que possible du comportement de l'ancien de l'interpolateur.

Une différence essentielle entre les deux fonctions est que, dans l'origine, notre interpolateur - si la valeur d'entrée est au-dessus ou au-dessous de l'entrée de gamme, origine, notre interpolateur permettra d'extrapoler le résultat. Si vous essayez cela avec le scipy interpolateur il soulève un ValueError. Considérer ce programme comme un exemple:

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)

Est-il un moyen judicieux de faire en sorte qu'au lieu de s'écraser, la dernière ligne sera tout simplement faire un linéaire d'extrapoler, de poursuivre les gradients défini par la première et la dernière de deux points à l'infini.

Noter, que dans le réel, le logiciel que je ne suis pas vraiment à l'aide de la fonction exp - c'est ici, à des fins d'illustration seulement!

  • scipy.interpolate.UnivariateSpline semble extrapoler sans problèmes.