2017-10-02 2 views
0

J'essaie d'obtenir un tableau de points intermédiaires après l'interpolation dans SciPy. Mais il ne semble pas y avoir de méthode directe pour le faire. Quelqu'un peut-il aider?Obtenir des points intermédiaires de SciPy CubicSpline

Exemple de code:

from scipy.interpolate import CubicSpline 
import matplotlib.pyplot as plt 
x = np.arange(10) 
y = np.sin(x) 
cs = CubicSpline(x, y) 
xs = np.arange(-0.5, 9.6, 0.1) 
plt.figure(figsize=(6.5, 4)) 
plt.plot(x, y, 'o', label='data') 
plt.plot(xs, np.sin(xs), label='true') 
plt.plot(xs, cs(xs), label="S") 
plt.plot(xs, cs(xs, 1), label="S'") 
plt.plot(xs, cs(xs, 2), label="S''") 
plt.plot(xs, cs(xs, 3), label="S'''") 
plt.xlim(-0.5, 9.5) 
plt.legend(loc='lower left', ncol=2) 
plt.show() 
+0

Avez-vous essayé d'appeler 'cs' sur des valeurs intermédiaires? Par exemple, utilisez 'new_xs = np.arange (-0.5, 9.6, 0.05)' et tracez 'plt.plot (new_xs, cs (new_xs))'? –

+0

Désolé, je vois que 'xs' a plus de points que x pour commencer. Les dérivés ne peuvent pas être beaucoup plus raffinés que ce que vous avez, avec une interpolation cubique. Qu'essayez-vous de faire? –

+0

Cela fonctionne, merci –

Répondre

2

Comme CubicSpline documentation says, l'objet retourne est appelable, avec des paramètres

  • x: array_like
    Points pour évaluer l'interpolant à.
  • nu: int, facultatif
    Ordre du dérivé à évaluer.
  • extrapolate: {bool, 'périodique', None}, option

Ainsi, cs(5) donne la valeur de la cannelure à 5 à, tandis que cs(5, 2) est sa dérivée seconde à 5, etc.