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

Scilab Discussion :

Analyse Matrice booléen vs Matrice Résultat [Débutant]


Sujet :

Scilab

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Analyse Matrice booléen vs Matrice Résultat
    Bonjour,

    J'ai deux matrices :

    La première matrice est constituée de booléen et me permet de savoir si les valeurs de la seconde matrices sont pertinentes (à prendre en compte ou pas) ou non.
    Exemple :
    {{0, 1, 1},
    {0, 0, 1},
    {1, 1, 1},
    {0, 0, 0}, }

    Ma seconde matrice contient les valeurs à (éventuellement) prendre en compte
    Exemple :
    {{1, 2, 3},
    {1, 2, 3},
    {1, 2, 3},
    {1, 2, 3}, }

    L'objectif c'est de récupérer la première valeur pertinente par ligne (si elle existe) et donc une seule valeur par ligne.

    Résultat attendu
    {2,
    3,
    1,
    0}

    Je comprends le job à faire d'un point de vue boucle pour chaque ligne regarder récupérer l'indice du premier booléen à vrai s'il existe. Puis récupérer la valeur correspondant à cette indice dans la seconde matrice (et 0 s'il n'existe pas).
    Mais je n'ai aucune idée de comment faire cela d'un point de vue matriciel.

    Si vous pouviez me donner des billes pour avancer, ça serait vraiment super sympa !

  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 Analyse Matrice booléen vs Matrice Résultat
    Bonjour,

    Un essai (on peut sûrement faire plus simple) :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    clear
    M1=[0, 1, 1;
    0, 0, 1;
    1, 1, 1;
    0, 0, 0]
     
    M2=[1, 2, 3;
    1, 2, 3;
    1, 2, 3;
    1, 2, 3]
     
    R=M1.*M2
    n=0;
    for l=1:4
        if R(l,:)==zeros(3,1)'
            n=n+1
            RR(n)=0
            break
        end
        for c=1:3
     
            if R(l,c)~=0 
                n=n+1;
                RR(n)=R(l,c);
                break
            end
     
        end
    end
    disp(RR)
    Ou :

    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
    clear
    M1=[0, 1, 1;
    0, 0, 1;
    1, 1, 1;
    0, 0, 0]
    M2=[1, 2, 3;
    1, 2, 3;
    1, 2, 3;
    1, 2, 3] 
    R=M1.*M2
    RR=R;
     for k=1:length(R)
     I=find(RR(:,1)==0);
     RR(I,1:2)=RR(I,2:3);
     end
     RES=RR(:,1);
     disp(RES)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Hello et merci beaucoup phryte pour ton retour ! :-)

    Si je comprends bien, tu me confirmes que l'on ne peux pas répondre à cette problématique via un calcul matriciel mais qu'il faille le faire via une (ou des) boucle(s) ?

    Bonne fin de journée,

    Alex

  4. #4
    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,

    Je n'ai pas trouvé une solution sans boucle !

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 160
    Points
    53 160
    Par défaut
    Une solution :

    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
    M1 = [0 1 1
        0 0 1
        1 1 1
        0 0 0]
     
    M2 = [1 2 3
        1 2 3
        1 2 3
        1 2 3]
     
    [i,j] = find((M1.*M2).');
    [a,b] = unique(j);
    k = sub2ind(size(M1), j(b), i(b));
    R = zeros(size(M2,1),1);
    R(a) = M2(k)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ah super, ça marche !
    Merci beaucoup à vous deux !

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

Discussions similaires

  1. [Débutants]Analyse structure base de données simple
    Par Serge57 dans le forum Sondages et Débats
    Réponses: 41
    Dernier message: 29/10/2007, 19h54
  2. Réponses: 3
    Dernier message: 06/05/2007, 20h46
  3. Réponses: 3
    Dernier message: 05/06/2006, 14h05
  4. Conversion matrice 4D en matrice 2D
    Par mosq_nico dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/06/2006, 20h07
  5. Réponses: 4
    Dernier message: 13/04/2006, 17h42

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