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 les lignes des 0 dans un tableau


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Supprimer les lignes des 0 dans un tableau
    Bonjour tous le monde,

    j'ai un tableau matlab de la forme suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A={1 2;0 0;3 4;0 0;5 6;0 0;0 0}
    et je souhaite supprimer les lignes des 0 dans ce tableau pour obtenir
    est ce que quelqu'un peut m'aider?
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Je n'ai pas tout compris mais j'ai ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A={1 2;0 0;3 4;0 0;5 6;0 0;0 0};
    AA = A(:,1);
    a = find(cellfun(@(AA) AA~=0,AA));
    B = A(a,:);

  3. #3
    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,
    Aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A={1 2;0 0;3 4;0 0;5 6;0 0;0 0};
    A(cellfun('isempty',cellfun(@(x) x(x~=0),A,'UniformOutput',false)))=[];
    reshape(A,3,2)
    ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A={1 2;0 0;3 4;0 0;5 6;0 0;0 0};
    A=num2cell(reshape(nonzeros(cell2mat(A)),3,2))

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Dans le cas suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A={1 2;0 0;3 4;0 0;5 0;0 0;0 0};
    et avec votre methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A(cellfun('isempty',cellfun(@(x) x(x~=0),A,'UniformOutput',false)))=[];
    reshape(A,3,2)
    ca me donne l'erreur suivante:
    Error using reshape
    To RESHAPE the number of elements must not change.
    Ce qui est logique. Y'a t'il pas une autre méthode qui supprime les lignes ou il y a que des 0, et qui ne supprime pas toutes les zero?
    Merci d'avance

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Je savais bien que la demande n'était pas complète

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A={1 2;0 0;3 4;0 0;5 0;0 0;0 0};
    AA_1 = cell2mat(A(:,1));
    AA_2 = cell2mat(A(:,2));
    a = AA_1==0;
    b = AA_2==0;
    c=a.*b;
    d = find(not(c));
    B = A(d,:);

  6. #6
    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 165
    Points
    53 165
    Par défaut
    Une alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A = {1 2 ; 0 0; 3 4 ; 0 0 ; 5 0 ; 0 0 ; 0 0};
     
    idx = cellfun(@any, A);
     
    idx = ~any(idx, 2);
     
    A(idx,:) = [];
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A = 
     
        [1]    [2]
        [3]    [4]
        [5]    [0]
    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)

  7. #7
    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 Supprimer les lignes des 0 dans un tableau
    Bonjour,
    Effectivement il fallait faire autrement.
    Aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A={1 2;0 0;3 4;0 0;5 0;0 0;0 0}
    A=A(find(cell2mat(A(1:end,1))+cell2mat(A(1:end,2))~=0),:)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A = 
     
        [1]    [2]
        [3]    [4]
        [5]    [0]
    Bien sûr cet exemple est limité aux nombres positifs !

    Pour le cas général :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=A(find(cell2mat(A(1:end,1)) | cell2mat(A(1:end,2))~=0),:)

Discussions similaires

  1. Supprimer les lignes en double dans un fichier texte
    Par SilkyRoad dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/05/2017, 15h09
  2. Remonter les lignes non vides dans un tableau excel
    Par gilou41 dans le forum Excel
    Réponses: 6
    Dernier message: 23/04/2013, 14h42
  3. Réponses: 2
    Dernier message: 28/06/2010, 18h27
  4. Coment supprimer les bordures des images dans un lien ?
    Par darkwhite dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 05/11/2006, 17h09
  5. [MySQL] Supprimer les informations des champs dans une table (suite)
    Par snakejl dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/05/2006, 15h37

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