web-dev-qa-db-fra.com

Que fait numpy.gradient?

Je sais donc quel est le gradient d'une fonction (mathématique), donc je pense que je devrais savoir ce que numpy.gradient Est-ce que. Mais non. Le documentation n'est pas vraiment utile non plus:

Renvoie le gradient d'un tableau à N dimensions.

Quel est le gradient d'un tableau? Quand est numpy.gradient utile?

24
usual me

Le gradient est calculé en utilisant les différences centrales à l'intérieur et les premières différences aux limites.

et

La distance par défaut est 1

Ceci signifie qu'à l'intérieur il est calculé comme

enter image description here

où h = 1,0

et aux frontières

enter image description here

9
4pie0

Aussi dans la documentation1:

>>> y = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
>>> j = np.gradient(y)
>>> j 
array([ 1. ,  1.5,  2.5,  3.5,  4.5,  5. ])
  • Le gradient est défini comme (changement dans y)/(changement dans x).
  • x, ici, est l'index, donc la différence entre les valeurs adjacentes est de 1.

  • Aux limites, la première différence est calculée. Cela signifie qu'à chaque extrémité du tableau, le gradient donné est simplement la différence entre les deux valeurs finales (divisée par 1)

  • Loin des limites, le gradient d'un indice particulier est donné en prenant la différence entre les valeurs de chaque côté et en divisant par 2.

Ainsi, le gradient de y, ci-dessus, est calculé ainsi:

j[0] = (y[1]-y[0])/1 = (2-1)/1  = 1
j[1] = (y[2]-y[0])/2 = (4-1)/2  = 1.5
j[2] = (y[3]-y[1])/2 = (7-2)/2  = 2.5
j[3] = (y[4]-y[2])/2 = (11-4)/2 = 3.5
j[4] = (y[5]-y[3])/2 = (16-7)/2 = 4.5
j[5] = (y[5]-y[4])/1 = (16-11)/1 = 5

Vous pouvez trouver les minima de toutes les valeurs absolues dans le tableau résultant pour trouver les points de retournement d'une courbe, par exemple.


1Le tableau est en fait appelé x dans l'exemple de la documentation, je l'ai changé en y pour éviter toute confusion.

58
SiHa

Considérez le tableau à N dimensions comme une matrice. Alors le gradient n'est rien d'autre que différenciation matricielle

Pour une bonne explication, regardez gradient description dans la documentation de matlab.

1
Robert Zaremba