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 :

Moyenne sur les lignes d'une matrice en négligeant certaines valeurs


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Par défaut Moyenne sur les lignes d'une matrice en négligeant certaines valeurs
    bonjour
    voila j'ai une matrice 1024*1024 je voudrait prendre le mean de cette matrice mais sans prendre les Zeros qui sont a l'interieur
    et ensuite faire la soustraction que sur les nombres differents de zeros

    ex :

    0 0 12 15 18 0 0 0 ... me donne 15
    0 11 6 2 3 8 0 0 .. me donne 7
    0 0 0 0 3 6 0 0 me donne 4.5


    et ensuite

    0 0 -3 0 3 0 0 0 ..
    0 4 -1 -5 -4 1 0 0 ..
    0 0 0 0 -1.5 1.5 0 0...

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Tu fais une boucle FOR-END qui scanne chaque ligne de ta matrice, tu utilises l'indexage logique pour trouver les valeurs non nulles sur chaque ligne et la fonction MEAN pour faire la moyenne

    Sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    X = [0 0 12 15 18 0 0 0
    0 11 6 2 3 8 0 0
    0 0 0 0 3 6 0 0]
     
    bsxfun(@minus,X,sum(X,2)./sum(X~=0,2)).*(X~=0)

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Par défaut
    j'ai tente la premiere methode mais ensuite j'aimerai enlever ce que le mean a chaque chiffre pour les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=1:948
        x=resfinal5(:,i);
        if x~=0
           B=mean(x) 
        end
    end
    ensuite je voudrai que mean(x) de chaque ligne soit soustrait a chaque x de la meme ligne et recuper ensuite ma matrice avec mes zeros et x-mean(x)

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Avant de faire quoi que ce soit d'autre, revoit ton code : il est faux...
    Pour plein de raisons :
    • Tu boucles sur les colonnes et pas sur les lignes
    • x~=0 sera vrai ssi tous les éléments de x sont différent de 0
      • soit B est la moyenne de toute la colonne qui n'a pas de zéros
      • soit il y a un zéro et la moyenne n'est pas calculée
    Et fait un tour par la
    Qu'est-ce que l'indexage logique ?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Par défaut
    alors j'ai regarder l'aide mais le probleme est que je n'y arrive pas
    a mon avis il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i=1:422
        for j=1:948
            x=resfinal(i,j);
            idx=find(x>0.1);
    mais je vois pas comment on fait pour appliquer mean(car il est ecrit que maintenant la matrice idx cest comme du binaire ) et le soustraire pour ensuite recuperer la matrice du debut avec les x differents de zeros changes

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Allez, puisqu'apparemment tu n'arrives pas à appréhender la faq (qui précise que l'indexage logique permet justement de ne pas utiliser FIND) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    X = [0 0 12 15 18 0 0 0
    0 11 6 2 3 8 0 0
    0 0 0 0 3 6 0 0]
    Xmean=zeros(size(X,1),1);%vecteur colonne qui a le même nombre de lignes que X
    %et qui va contenir les moyennes de chaque ligne
    %Boucle sur les lignes :
    for i=1:size(X,1)
       maLigne=X(i,:);%ième ligne
       Xmean(i)=mean(maLigne(maLigne~=0));%moyenne de maLigne pour maLigne~=0
    end
    Xmean %affichage

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 62
    Par défaut
    et si je fais cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for i=1:422
        for j=1:948
            x=resfinal(i,j);
            if x~=0
               B=mean(x);
               C(i,1)=B ;
            end  
        end
    end
    et ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i=1:422
        for j=1:948
            x=resfinal(i,j);
     
            if x~=0
                y=x-C(i,1);
                A=zeros(422,948);
                B=A+y;
            end
        end
    end

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Dut Voir le message
    tu utilises l'indexage logique pour trouver les valeurs non nulles sur chaque ligne
    => : Qu'est-ce que l'indexage logique ?

Discussions similaires

  1. Opérations sur les colonnes d'une matrice
    Par george216 dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/01/2010, 08h08
  2. Réponses: 3
    Dernier message: 08/04/2009, 12h10
  3. Permuter les lignes d'une matrice
    Par JonasB dans le forum MATLAB
    Réponses: 3
    Dernier message: 12/03/2009, 15h58
  4. Travail sur les éléments d'une matrice.
    Par Jefeh dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/11/2007, 15h10
  5. Comparaison de toutes les lignes d'une matrice
    Par hidies dans le forum MATLAB
    Réponses: 10
    Dernier message: 16/05/2007, 11h11

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