121 votes

Comment calculer la dérivée en utilisant Numpy ?

Comment calculer la dérivée d'une fonction, par exemple

y = x2+1

en utilisant numpy ?

Disons, je veux la valeur de la dérivée à x = 5...

6 votes

Vous devez utiliser Sympy : sympy.org/fr/index.html. Numpy est une bibliothèque de calcul numérique pour Python.

0 votes

Alternatively, voulez-vous une méthode pour estimer la valeur numérique de la dérivée? Pour cela, vous pouvez utiliser une méthode de différences finies, mais gardez à l'esprit qu'elles ont tendance à être horriblement bruyantes.

9voto

johnson Points 630

Vous pouvez utiliser scipy, ce qui est assez simple :

scipy.misc.derivative(func, x0, dx=1.0, n=1, args=(), order=3)

Trouvez la n-ième dérivée d'une fonction en un point.

Dans votre cas :

from scipy.misc import derivative

def f(x):
    return x**2 + 1

derivative(f, 5, dx=1e-6)
# 10.00000000139778

7voto

Gordon Schücker Points 417

Pour calculer les gradients, la communauté de l'apprentissage automatique utilise Autograd :

"Calcule efficacement les dérivées du code numpy."

Pour installer :

pip install autograd

Voici un exemple :

import autograd.numpy as np
from autograd import grad

def fct(x):
    y = x**2+1
    return y

grad_fct = grad(fct)
print(grad_fct(1.0))

Il peut également calculer les gradients de fonctions complexes, par exemple des fonctions multivariées.

0 votes

Salut, est-ce que cette fonction peut être utilisée pour différencier entre deux colonnes de données numériquement en fournissant la longueur de pas ? Merci

3voto

fraxel Points 13844

En fonction du niveau de précision dont vous avez besoin, vous pouvez le calculer vous-même, en utilisant la preuve simple de la différenciation :

>>> (((5 + 0.1) ** 2 + 1) - ((5) ** 2 + 1)) / 0.1
10.09999999999998
>>> (((5 + 0.01) ** 2 + 1) - ((5) ** 2 + 1)) / 0.01
10.009999999999764
>>> (((5 + 0.0000000001) ** 2 + 1) - ((5) ** 2 + 1)) / 0.0000000001
10.00000082740371

En réalité, nous ne pouvons pas prendre la limite du gradient, mais c'est assez amusant. Il faut quand même faire attention car

>>> (((5+0.0000000000000001)**2+1)-((5)**2+1))/0.0000000000000001
0.0

2voto

Le sujet de différenciation numérique est assez "vaste" et il existe de nombreuses façons de calculer de telles dérivées entièrement numériquement. Je vous laisse suivre le lien précédent pour découvrir si et comment appliquer de telles techniques à vos problèmes.

2voto

akakcolin Points 21

Voici ce lien, en utilisant Scipy

http://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.derivative.html

Vous pouvez trouver votre réponse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X