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 :

conserver dans un vecter des indices de lignes et colonnes d'une matrice [Débutant]


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut conserver dans un vecter des indices de lignes et colonnes d'une matrice
    Bonjour,

    J'ai une matrice A qui ne contient que des 0 ou des 1, je voudrais faire un programme qui m'enregistre pour chaque cases où j'ai un 1 le numero de ligne
    et de colonne dans deux vecteurs separé x et y.

    j'ai essayé un petit bout de programme mais j'ai du faire une erreur car matlab à calculé pendant un moment sans me donner de reponse et sa à beugé....?!?


    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
    L=size(A,1);
    C=size(A,2);
     
    x=zeros(L);
    y=zeros(C);
    for n=1:1:L
        for p=1:1:C
            if A(n,p)==1;
                [x(z) y(z)]=find(A(n,p));
            else
                x(z)=0;
                y(z)=0;
            end
        z=z+1;
    end
    end
    si vous pourriez m'aider ca serai gentil

    A+

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Essaye :

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Points : 40
    Points
    40
    Par défaut Simple
    A la vache, tu t'es fait un peu chié la....

    Une ligne :

    [l c] = find(matrice == 1)

    Oublie toutes les déclarations de variable. Ici t'en n'a pas besoin. C'est pas vraiment du C. l et c n'ont pas besoin d'être initialisés.

    Pour info : la longueur de l ou c indique le nombre de 1 détectés.

    le ième "1" correspond à l'élément matrice(l(i),c(i)).

    Salut, bonne continuation.

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 85
    Points
    85
    Par défaut
    Salut,

    Alors, tu peux rectifier ton code de 2 manières différentes. (en fait tu utilise deux trucs qui fonctionnent indépendament, mais pas quand tu les met ensemble). Je m'explique:

    1ère option, avec la boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    L=size(A,1);
    C=size(A,2);
     
    x=zeros(L);
    y=zeros(C);
    for n=1:1:L
        for p=1:1:C
            if A(n,p)==1;
                x(z)=n;
                y(z)=p;
                z=z+1;
            end
    end
    end
    Dans ce cas, tu teste chaque pixel et si la valeur est supérieure à 0, alors tu met les coordonnées dans les vecteurs X et Y (j'ai peut-être inversé les lignes et les colonnes, mais l'idée est là).


    2ème méthode, avec la fonction "find" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L=size(A,1);
    C=size(A,2);
     
    [x y]=find(A);
    En utilisant la fonction "find" comme ça, elle te retourne dans X et Y les coordonnées des pixels non nuls de ta matrice.

    Par exemple, si tu as H=[0 1 0;1 1 1;0 1 0], alors tu récupères:
    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
    >> [X Y]=find(H)
     
    X =
     
         2
         1
         2
         3
         2
     
     
    Y =
     
         1
         2
         2
         2
         3
    Voilà, normalement maintenant ton programme doit marcher

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Merci beaucoup à tous pour votre aide !

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

Discussions similaires

  1. Supprimer ligne et colonne d'une matrice
    Par programeur dans le forum Débuter
    Réponses: 2
    Dernier message: 06/03/2013, 15h51
  2. Réponses: 12
    Dernier message: 05/06/2012, 10h36
  3. Réponses: 0
    Dernier message: 26/08/2010, 06h16
  4. Réponses: 19
    Dernier message: 18/08/2010, 15h01
  5. concatener dans un champ des resultats en ligne
    Par pied9 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/12/2008, 21h36

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