IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[numpy] mean vs average


Sujet :

Python

  1. #1
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut [numpy] mean vs average
    Bonjour à tous

    Après plusieurs heures de recherche dans mon gros code qui manipule des array, j'ai identifié la source précise de mon problème.
    Je vous la présente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    >>> import numpy as np
    >>> a=np.array([1,2,3])
    >>> b=np.array([1,2,3], dtype=object)
    >>> a
    array([1, 2, 3])
    >>> b
    array([1, 2, 3], dtype=object)
    >>> np.mean(a)
    2.0
    >>> np.mean(b)
    2.0
    >>> np.average(a)
    2.0
    >>> np.average(b)
     
    Traceback (most recent call last):
      File "<pyshell#43>", line 1, in <module>
        np.average(b)
      File "/Library/Python/2.7/site-packages/numpy/lib/function_base.py", line 515, in average
        scl = avg.dtype.type(a.size/avg.size)
    AttributeError: 'float' object has no attribute 'dtype'
    Initialement dans mon code j'avais mis un np.average qui aujourd'hui m'a produit une erreur de compilation.
    En mettant np.mean à la place, cela fonctionne mais j'aimerais bien comprendre pourquoi ...
    De plus, quel est le role de ce mystérieux attribut dtype ? (Je le spécifie ici à la main, mais dans mon code rien de cela, l'array est géneré en fonction de d'autre. C'est avec pdb que j'ai remarqué que parfois il avait l'attribut dtype=object et d'autre non ... )

    Question subsidiaire :
    Si je veux mettre ce petit test dans un script la commande print a, tout comme la commande print b me fournit : [1,2,3]
    Comment puis-je faire afficher de la même manière que l'affichage de base dans le shell (c-a-d de sorte à ce que l'affichage de a et de b produise respectivement array([1, 2, 3]) et array([1, 2, 3], dtype=object) ) ?


    Merci pour vos réponses

    Lg_53

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par lg_53 Voir le message
    Initialement dans mon code j'avais mis un np.average qui aujourd'hui m'a produit une erreur de compilation. En mettant np.mean à la place, cela fonctionne mais j'aimerais bien comprendre pourquoi ...
    C'est un bug connu de numpy qui devrait être corrigé dans les versions récentes.

    Citation Envoyé par lg_53 Voir le message
    Comment puis-je faire afficher de la même manière que l'affichage de base dans le shell (c-a-d de sorte à ce que l'affichage de a et de b produise respectivement array([1, 2, 3]) et array([1, 2, 3], dtype=object)
    print repr(array).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    toutes vos interrogations se trouvent dans le manuel NumPy, très complet : http://docs.scipy.org/doc/numpy/reference/

    docs.scipy.org/numpy.average
    Compute the weighted average along the specified axis.

    docs.scipy.org/numpy.mean
    Compute the arithmetic mean along the specified axis.

    Concernant le « mystérieux » dtype : docs.scipy.org/Data type objects

    Tout l'intérêt de NumPy est de pouvoir "typer" des tableaux/matrices afin d'en optimiser le parsing dans le cas d'un fichier, le stockage et la manipulation. Par défaut il gère ça automatiquement mais si on connait le format des données d'entrée alors autant l'indiquer à la déclaration avec dtype.

    Dans l'exemple :
    a=np.array([1, 2, 3])

    a.dtype
    Va retourner sur la plupart des machines : dtype('int32')

    Si on regarde la mémoire allouée pour chacun des éléments :

    Soit 4 octets (32 bits) par élément.

    Si on sait que les valeurs du tableau ne dépassera pas une certaine valeur et/ou précision dans le cas d'un nombre flottant alors autant le fixer afin d'en optimiser la taille en RAM et de minimiser le temps de calcul lors des opérations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=np.array([1,2,3], dtype=np.int16)
    >>> a.dtype
    dtype('int16')

    Voilà comment gagner 1.86 Go de RAM sur 1 milliard d'entiers.

    Bonne lecture,

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,


    C'est un bug connu de numpy qui devrait être corrigé dans les versions récentes.

    print repr(array).

    - W
    Merci, clair et concis comme réponse.
    Merci également YCL-1 pour l'ajout de tes précisions.

    Pour ceux que ca intéresse, mon array de type object est produit lorsque je retire les éléments None d'un précédent array comme dans le code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import numpy as np
     
    a=np.array([1,None,3])
    print repr(a)
    ind=np.where(a!=np.array([None]))
    print ind
    b=a[ind]
    print repr(b) ### array([1, 3], dtype=object)
    c=np.array(b, dtype=np.float32)
    print repr(c) ### array([ 1.,  3.], dtype=float32)
    d=np.array([1.0,3.4,1.5])
    print repr(d) ##array([ 1. ,  3.4,  1.5])
    print d.dtype  ###dtype('float64')
    Etant donné que le tableau b est défini comme un sous tableau de a, il prend le même type.
    On peut faire un cast d'un array en object vers un array en float32 ou 64 par exemple.
    Cela dit je pense que faire un cast pour ensuite appliquer la méthode np.average est moins rapide que de directement appeler np.means.

    Je vais donc m'en tenir à appeler np.means.

    Merci à vous pour ces éclaircissement.

    Lg53

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Root Mean Square Error
    Par Flow_75 dans le forum MATLAB
    Réponses: 6
    Dernier message: 23/10/2007, 03h18
  2. [Débutant] r-mean(r)<2*std(r) --> graph ?
    Par Caro3995 dans le forum MATLAB
    Réponses: 5
    Dernier message: 15/11/2006, 23h23
  3. fonction Average dans un tableau ou on rajoute des colonnes
    Par Huubb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2006, 17h43
  4. [numpy] fromstring/tostring : problème!
    Par Panthère Bleue dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 13/08/2006, 22h27
  5. numpy:dilatation gestion des bords?
    Par parp1 dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 12/06/2006, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo