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 une ligne d'une matrice [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut supprimer une ligne d'une matrice
    bonsoire
    Voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A:
    168	173	1
    169	168	1
    173	168	1
    178	179	1
    178	183	1
    179	178	1
    en fonction des deux premiers éléments je veux supprimer les lignes en rouge vue qu'elles existent déja en bleu (mais inversé) et je veux mettre le résultat dans un autre tableau, j'ai cherché unpeu, je suis tombé sur arrayfun, ca marche dans ce cas là ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    doctorant
    Inscrit en
    Décembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    bonsoir l'explication dans la figure
    si vous avez beaucoup de variable, il faut utiliser la boucle if ou for
    Images attachées Images attachées  

  3. #3
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par nabilfib Voir le message
    bonsoir l'explication dans la figure
    si vous avez beaucoup de variable, il faut utiliser la boucle if ou for
    mdr, c'est la solution la plus simple mais je veux un mini programme qui fait ca, et j'ai essayé mais ca donne rien

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Tu nous montres ton bout de code qui ne donne rien?
    Tu dois pouvoir t'en sortir avec 2 boucles for imbriquées, mais c'est pas très "Matlab".
    Jte tiens au courant si je trouve mieux dans la journée...

  5. #5
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Je te conseille de créer une fonction qui prend en entrée deux lignes, qui ordonne chacune des lignes dans l'ordre croissant, et qui teste si elles sont identiques. Si elles sont identiques, tu renvoies 1, sinon tu renvoies 0.

    Tu crées une nouvelle variable disons M = 0 qui contiendra ta matrice simplifiée. Tu crées une autre variable contenant doublon_existant = 0.

    Dans ton programme principal, tu fais une boucle de la première ligne a l'avant dernière ligne :
    {
    doublon_existant = 0;
    Tu fais une nouvelle boucle de la première de la ligne suivant celle en cours à la dernière ligne :
    {
    Tu appelles ta fonction avec les deux lignes courantes. Si ta fonction te renvoies 0, tu ne fais rien, sinon tu écris : doublon_existant = 1
    }
    Si doublon_existant == 0 alors tu copies la ligne de la première boucle dans une nouvelle ligne de M. Sinon, tu ne fais rien.
    }

    Enfin, tu refais un dernier test avec les deux dernières lignes : si elles sont identiques, tu ne fais rien. Sinon, tu rajoutes la dernière ligne dans une nouvelle ligne de M.

    n.b.: Tu crées une nouvelle ligne de M avec M(end+1,: ) = blablabla

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  6. #6
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Tu peux utiliser la fonction intersect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [c, ia, ib] = intersect(A,A(:,[2 1 3]),'rows')
    Tu obtiens ainsi déjà une information très intéressante des indices des doublons. Si tu n'as que des paires de doublons, prendre un élément sur 2 de ia devrait suffire :

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    @ FLB : Attention, Imène_23 avait spécifié selon les deux premiers éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [c, ia, ib] = intersect(A(:,1:2), A(:,[2 1]), 'rows');
    A(ia(1:2:end),:)=[];
    Par contre, suivant l'emplacement des doublons, je ne suis pas sûr que supprimer une valeur sur 2 soit correct...

    Ma solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [~, ia] = unique(sort(A(:,1:2),2), 'rows', 'first');
    A(sort(ia),:)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Supprimer les lignes d'une table dans une autre table
    Par blastmind dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/04/2009, 14h17
  5. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42

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