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

MATLAB Discussion :

[mean] Problème avec la fonction [Débutant]


Sujet :

MATLAB

  1. #1
    Membre confirmé

    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Points : 485
    Points
    485
    Par défaut [mean] Problème avec la fonction
    Bonjour,

    Je rencontre actuellement un problème de compréhension de la fonction mean. J'utilisais à la base de grandes matrices, mais je les ai simplifiées à l'extrême pour pouvoir vous expliquer plus facilement la situation (sachant que même pour moi, je ne comprends toujours pas ^^).

    Je possède donc 2 matrices de dimension 2x3, que je vais nommer A et B. Voici leurs valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A
    1 1 1
    2 2 2
     
    B
    10,000 10,000 10,000
     9,764  8,458  9,139

    La matrice C, de même dimension, va être complétée via cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i=1:3;
       for j=1:2;
            C(j,i) = mean(B(A(j,i),:));
       end;
    end;
    Et j'obtiens comme résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    C
    10,000 10,000 10,000
     7,802  7,802  7,802

    Sauf que je ne comprends pas du tout le 7,802, et j'aimerais bien comprendre ce résultat. Voilà pourquoi je sollicite votre aide.

    Merci d'avance si vous arrivez à éclairer ma lanterne.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Personnellement j'obtiens bien 9.1203 et non 7.802

  3. #3
    Membre confirmé

    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Points : 485
    Points
    485
    Par défaut
    Oui, mais même là ce n'est pas le but. ^^ De ce que je comprends de la formule, le but n'est pas de donner une moyenne de chaque ligne de la matrice B, mais plutôt de la matrice A en fonction du barème de départ de la matrice B (la valeur 10).

    Je rappelle la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C(j,i) = mean(B(A(j,i),:));
    où il y a les 2 matrices A et B à l'intérieur de la fonction mean...


    Si à la place, je mets :
    je n'ai que des 10 dans la matrice C.


    Et si je mets :
    je n'ai que des 7,802...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par KartSeven Voir le message
    Oui, mais même là ce n'est pas le but. ^^ De ce que je comprends de la formule, le but n'est pas de donner une moyenne de chaque ligne de la matrice B, mais plutôt de la matrice A en fonction du barème de départ de la matrice B (la valeur 10).
    Non pas exactement, tu calcules bien des moyennes sur les lignes de B, lignes qui sont sélectionnées par les valeurs de A.

    Est-on bien d'accord que B(2,:) renvoie bien 9.7640 8.4580 9.1390 ?
    Et donc que la moyenne mean(B(2,:)) = (9.7640 + 8.4580 + 9.1390)/3 = 9.1203 ?

  5. #5
    Membre confirmé

    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Points : 485
    Points
    485
    Par défaut
    Ah non, je suis formel que les données de B ne sont d'aucune utilité, à part la valeur de base sur la 1ère ligne (10,000) ! ^^

    J'en veux pour preuve que, à la base, les matrices sont de dimension 90x40 ! La matrice A étant grosso modo comme ceci (il peut y avoir quelques subtilités dans cette matrice qui font que les colonnes ne sont pas toujours identiques comme ça, j'ai d'ailleurs mis ces subtilités en gras) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    A
    1  1  1  1  1  1  1  ... 1  1
    2  2  2  2  2  2  2  ... 2  1
    2  3  3  3  3  3  3  ... 3  3
    4  4  4  4  4  4  4  ... 4  4
    5  5  5  5  5  5  4  ... 5  5
    ...
    89 89 89 89 89 89 89 ... 89 89
    90 90 90 90 90 90 90 ... 90 90
    La matrice B comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    B
    10,000 10,000 10,000 10,000 10,000 10,000 10,000 ... 10,000 10,000
     9,846  9,882  9,145  9,356  9,904  9,840  9,723 ...  9,204 10,000
     9,846  9,704  8,975  8,814  9,045  9,556  9,602 ...  8,743  8,753
     9,114  9,324  8,804  8,569  8,459  9,350  9,402 ...  8,556  8,556
     8,845  9,005  8,116  8,530  7,958  9,003  9,402 ...  7,889  8,123
    ...
     2,113  1,568 -0,044  3,114  2,356  0,896  1,234 ...  1,658  2,340
     1,056  1,113 -0,234  1,896  2,045 -0,145  0,899 ...  1,155  2,123
    Avec donc toujours 10 sur la première ligne, et la valeur d'en dessous sera toujours inférieure à celle du dessus, parfois égal (et dans ce cas, ça génère également un chiffre identique sur la matrice A par rapport à la ligne au-dessus, ce sont les chiffres en gras). Sachant que sur la fin, elle peut même être négative !


    Et la matrice C, générée donc par la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:3;
       for j=1:2;
            C(j,i) = mean(B(A(j,i),:));
       end;
    end;
    va donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C
    10,000 10,000 10,000 10,000 10,000 10,000 10,000 ... 10,000 10,000
     9,556  9,556  9,556  9,556  9,556  9,556  9,556 ...  9,556 10,000
     9,556  9,246  9,246  9,246  9,246  9,246  9,246 ...  9,246  9,246
     8,898  8,898  8,898  8,898  8,898  8,898  8,898 ...  8,898  8,898
     8,621  8,621  8,621  8,621  8,621  8,621  8,898 ...  8,621  8,621
    ...
     1,688  1,688  1,688  1,688  1,688  1,688  1,688 ...  1,688  1,688
     1,033  1,033  1,033  1,033  1,033  1,033  1,033 ...  1,033  1,033
    Bref, des valeurs identiques sur chaque ligne, dans la même veine que la matrice A, mais avec un barème qui démarre à 10... comme la matrice B.


    Pour répondre à tes questions Winjerome, sur mon exemple méga-simplifié :
    Citation Envoyé par Winjerome Voir le message
    Est-on bien d'accord que B(2,:) renvoie bien 9.7640 8.4580 9.1390 ?
    Oui.


    Citation Envoyé par Winjerome Voir le message
    Et donc que la moyenne mean(B(2,:)) = (9.7640 + 8.4580 + 9.1390)/3 = 9.1203 ?
    Non. ^^ Ça renvoie 7,802.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bin que veux-tu que je te dise à part "ta fonction mean est complètement buguée"
    Si le simple calcul (9.7640 + 8.4580 + 9.1390)/3 te renvoie 7.802, tu imagines bien que tu as un problème ? Aucune valeur n'est en dessous de 8 et tu obtiens 7.8 comme moyenne !!!

    Et pour info j'obtiens bien les bonnes valeurs (en parfaite adéquation avec la ligne que tu utilises, et les seules valeurs que tu fournis) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C =
     
       10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   ...	10.0000   10.0000
        9.6556    9.6556    9.6556    9.6556    9.6556    9.6556    9.6556   ...	 9.6556   10.0000
        9.6556    9.2264    9.2264    9.2264    9.2264    9.2264    9.2264   ...	 9.2264    9.2264
        8.9038    8.9038    8.9038    8.9038    8.9038    8.9038    8.9038   ...	 8.9038    8.9038
        8.5412    8.5412    8.5412    8.5412    8.5412    8.5412    8.9038   ...	 8.5412    8.5412
    	...
        1.6928    1.6928    1.6928    1.6928    1.6928    1.6928    1.6928   ...	 1.6928    1.6928
        1.1009    1.1009    1.1009    1.1009    1.1009    1.1009    1.1009   ...	 1.1009    1.1009
    Citation Envoyé par KartSeven Voir le message
    les données de B ne sont d'aucune utilité
    Heu tu pourrais préciser là ?
    Je me répète : tu calcules la moyenne des lignes "pointées" par les valeurs de A.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ligne = A(j,i)
    valeurs = B(ligne,:)
    mean(valeurs)
    Dernière modification par Invité ; 23/09/2012 à 22h33.

  7. #7
    Membre confirmé

    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Points : 485
    Points
    485
    Par défaut
    C'est bon, problème résolu. ^^ En gros, c'était de ma faute ! Comme je le disais, les matrices originales sont de 90x40 et je pensais les avoir simplifiées en 2x3 comme pour mon exemple du premier post... mais je ne les avais pas bien réduites.

    Pour la petite histoire, hormis cette erreur de base, il y a aussi le fait que j'étais persuadé que les valeurs des matrices B et C étaient indépendantes, vu que dans mon programme, il y a une quatrième matrice (que je vais appeler D) qui prend la moyenne de chaque valeur des matrices B et C. C'est-à-dire que par exemple :
    D(1,1)=[B(1,1)+C(1,1)]/2

    Voilà pourquoi je soutenais que les valeurs de la matrice C ne pouvaient pas dépendre de celles de la matrice B. Mais du coup, ça veut dire que la matrice D est la moyenne de 2 matrices, dont l'une d'elles (la C) prend déjà la moyenne des valeurs de l'autre (la B)... Je trouve pas ça logique... ^^

    Ah, et si vous trouvez bizarre que je ne m'y retrouve pas dans ce qui est programmé dans MATLAB, c'est parce que ce n'est pas moi qui ai fait la programmation. ^^ J'ai pris la succession de quelqu'un d'autre pour administrer un site, et j'ai récupéré tous les fichiers sans qu'on ne m'explique quoi que ce soit, et alors que je ne savais même pas ce qu'était MATLAB... Au début j'ai simplement cherché à faire fonctionner le tout pour pouvoir reprendre le flambeau, mais à force faut bien que je comprenne ce qui est programmé, pour que je sache au moins ce que je fais...

    Donc voilà. Merci Winjerome pour le coup de main !

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

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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