numpy.gradient avec edge_order=2
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

numpy.gradient avec edge_order=2



  1. #1
    Brinicle

    numpy.gradient avec edge_order=2


    ------

    Bonjour,

    Je ne comprends pas très bien le fonctionnement de l'argument edge_order de la fonction numpy.gradient (ici), exemple :

    Code:
    import numpy as np
    x = np.arange(5)**2
    print(np.gradient(x,edge_order=2))
    Retourne : [0. 2. 4. 6. 8.]
    Et x vaut : [ 0, 1, 4, 9, 16]

    Je ne comprends pas pourquoi on n'a pas à l'indice 0 (x[1]-x[-1])/2=-7.5 et à l'indice 4 (x[0]-x[3])/2=-4.5, c'est à dire la formule des différences d'ordre 2 (comme pour les autres indices du tableau), avec dx=1 :



    Au lieu de cela, on a 0 et 8...

    -----

  2. #2
    umfred

    Re : numpy.gradient avec edge_order=2

    que valent x[-1] et x[5] ?
    tes calculs sont erronées de toutes façons:
    x[1]=1 et x[-1] serait égal à 1 aussi, donc (1-1)/2=0 donc le retour est juste
    x[5] serait égal à 25 et x[3] =9 donc (25-9)/2=16/2=8 donc le retour est juste aussi

  3. #3
    Brinicle

    Re : numpy.gradient avec edge_order=2

    tes calculs sont erronées de toutes façons:
    x[1]=1 et x[-1] serait égal à 1 aussi, donc (1-1)/2=0 donc le retour est juste
    x[5] serait égal à 25 et x[3] =9 donc (25-9)/2=16/2=8 donc le retour est juste aussi
    Quand on ne sait pas, on ne répond pas, sachez que x = [0,1,4,9,16] et que pour les tableaux numpy, x[-1]=x[0] et x[5] n'existe pas, la dernier est x[4]. Et oui, les indices commencent à 0 !

    Sachez aussi que j'ai vérifié ces valeurs en tapent directement (x[1]-x[-1])/2 et (x[0]-x[3])/2 dans le shell.

  4. #4
    umfred

    Re : numpy.gradient avec edge_order=2

    la formule générale (donc mathématique) ne prend pas les indices numpy/python, mais des indices "temporelles" (ou d'"itération"). on ne va pas prendre la fin d'une courbe pour estimer ce qui se passe à son début ?
    (j'aurai du mettre des parenthèses pour dire que j'évoquais la fonction x (x(t)=t**2), et que dans celles-ci, je mettais t-1 et t+1, pour calculer x'(t))

  5. A voir en vidéo sur Futura
  6. #5
    Brinicle

    Re : numpy.gradient avec edge_order=2

    Désolé d'avoir été vexant, je pensait effectivement que vous parliez de mon tableau x...

    De toute façon, j'ai trouvé, et vérifié, il calcule sans doute:



    Comme ici dans "différences d'odre supérieur", que j'ai redémontrée en considérant le développements limités de f(x+h) et f(x+2h). D'ailleurs, cela explique pourquoi je pouvais avoir des problèmes de divergence dans mon code avec edge_order=2 mais pas avec edge_order=1 : 2h n'était pas assez petit (mais inférieur à 1 quand même).

    Pour ceux qui comme moi cherchaient des conditions aux limites périodiques, il y a ça (en changeant axis selon la direction où l'on veut dériver si l'on a un tableau 2D, 0 : selon y et 1 : selon x) :

    Code:
    (np.roll(x,-1,axis=axis)-np.roll(x,1,axis=axis))/2

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/04/2020, 08h58
  2. problème avec numpy
    Par invitee290a5e0 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 21/05/2018, 17h32
  3. Python et Numpy
    Par pouic92 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 25/01/2018, 10h42
  4. Réponses: 7
    Dernier message: 31/05/2017, 13h31
  5. Matrice avec numpy dans python
    Par invite19e61be6 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 17/02/2016, 22h09