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 :

Supprimer lignes d'un tableau sous condition


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Supprimer lignes d'un tableau sous condition
    Bonjour,

    Je n'arrive pas à me débloquer sur ce sujet :

    J'ai une Matrice M composée de 4 vecteurs colonnes A, B, C, D :

    A = [1 9 5 4];
    B = [15 27 13 8];
    C = [6 2 10 0.5];
    D = [13 14 15 16];

    M(:,1)= A';
    M(:,2)=B';
    M(:,3)=C';
    M(:,4)=D';

    M =
    [A] [B] [C] [D]
    1.0000 15.0000 6.0000 13.0000
    9.0000 27.0000 2.0000 14.0000
    5.0000 13.0000 10.0000 15.0000
    4.0000 8.0000 0.5000 16.0000


    Ce que j'aimerais c'est pouvoir supprimer toute une ligne de la matrice M si :
    - sur le vecteur A il y a une valeur < 2
    ou
    - sur le vecteur B il y a une valeur > 20
    ou
    - sur le vecteur D il y a une valeur >15.5

    Dans cet exemple, il n'y aura que la ligne 3 qui ne devrait pas être supprimée.


    Je pense qu'il faut que je fasse une boucle if dans une boucle for, en repérant l'index des lignes mais je n'arrive pas à écrire ce que je veux. C'est frustrant.
    Quelqu'un pourrait m'aider s'il vous plait ?

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    Une manière basique de faire serait de faire une boucle for "chaque ligne de M", et de mettre une condition dans cette boucle, pour vérifier si la ligne doit être retirée ou non. La condition serait, par exemple de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flag = M(k,1)>2 && M(k,2)>20 && M(k,3)>15.5 ; % flag ==1 if the k^th line must be deletted
    dont l'écriture peut être simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flag = prod(M(k,:)>[2,20,15.5]) ; % flag ==1 if the k^th line must be deletted
    et, dans le cas où la condition serait valide, il faudrait supprimer la ligne associée avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M(k,:)=[] ; % delete the k^th line
    Pour que ce code fonctionne, il faut commencer par étudier la dernière ligne puis remonter vers la première. Sans cela, certaines lignes ne seront pas étudiées et le programme plantera : après avoir, par exemple, supprimé la 5e ligne, la ligne à étudier ensuite n'est pas la 6e ligne de M, mais sa 5e ligne à nouveau.

    Une autre manière de faire consiste à ne pas directement supprimer les lignes "mauvaises" de M dans la boucle for, mais de remplir un vecteur dont le kième élément indique si la kième ligne de M doit être supprimée.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci !!

    Voilà ce que j'ai fait du coup :
    J'ai ma nouvelle Matrice Mprim qui est la matrice M moins les lignes qui ne m'interessent pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Mprim=[];
    for indM = 1:size(M,1)
        if M(indM,1)>490 && M(indM,1)<790 && M(indM,2)>490 && M(indM,2)<790 && M(indM,3)>250 && M(indM,3)<550 && M(indM,4)>250 && M(indM,4)<550
            Mprim=[Mprim; M(indM, :)];
        end
    end

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2019
    Messages : 90
    Points : 254
    Points
    254
    Par défaut
    Bonjour,

    pas sûr que ce soit le code le plus rapide à l'exécution, mais ca fera le travail et c'est simple

Discussions similaires

  1. [Google Sheets] Remonter des lignes en haut d'un tableau sous condition
    Par supergoam dans le forum APIs Google
    Réponses: 0
    Dernier message: 05/12/2018, 18h56
  2. Supprimer une ligne d'un DataFrame sous condition
    Par alexcot13 dans le forum Général Python
    Réponses: 7
    Dernier message: 15/06/2018, 18h20
  3. [WD17] Supprimer des lignes d'une table sous condition
    Par alex1005 dans le forum WinDev
    Réponses: 7
    Dernier message: 15/10/2012, 14h27
  4. supprimer lignes/cellules de tableau vides
    Par Drozo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/08/2006, 13h21
  5. Réponses: 5
    Dernier message: 19/06/2006, 14h17

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