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 :

Suppression des lignes dans une matrice [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut Suppression des lignes dans une matrice
    Salut a tous
    je voudrai supprimer les lignes en sens inverse à d'autre lignes dans la même matrice, J'aimerai surtout trouver un moyen de faire ça d'une façon propre et optimisée.
    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    q=[1 2 3;3 2 1;4 3 2;5 4 3;2 3 4];
    for i=1:size(q,1)
        if i>size(q,1)
            break
        end
        line_idx=find(ismember(q,repmat(fliplr(q(i,:)),size(q,1),1),'rows'))
        q(line_idx,:)=[]
    end
    Merci

  2. #2
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    clc
    q=[1 2 3;3 2 1;4 3 2;5 4 3;2 3 4]
    a = fliplr(q) ;
    b = [q ; a] ;
    [c, cx] = sortrows([q ; a]) ;
    d = max(abs(c-circshift(c, 1)),[], 2) ;
    e = [d, circshift(d, -1)] ;
    f = min(e, [], 2) ;
    g = cx(f>0) ;
    resultat = q(g(g<=size(q, 1)), :)
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Bonjour ;
    Merci pour votre réponse , ce que je voudrai par exemple pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q=[1 2 3;3 2 1;4 3 2;5 4 3;2 3 4] ;
    q soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q=[1 2 3 ;4 3 2 ;5 4 3] ;
    d'après votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat =     5     4     3  ??????
    Sachant que j'ai des matrices de très grandes tailles.
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    q = sort(q,2);
    q = unique(q, 'rows');
    Non ?
    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)

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Merçi infiniment Dut ;
    J’ai un autre problème : par exemple pour une matrice A d'ordre 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=[3 4 5 2;1 2 4 6;3 4 8 7;2 4 3 7]
    et une matrice B contient des indices de lignes et de colonnes de la matrice A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B=[2 3 4 1;4 3 2 1;3 2 1 4;4 2 3 1;1 2 3 4]
    Je voudrai S1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n=4;
    rows = B(:,1:n-1);
    cols = B(:,2:n);
    S1= sum( A( sub2ind(size(A),rows,cols) ) ,2)
    Et S2:

    par exemple a partir de la colonne '' 2 '' B soit:

    B1=[2 3 1 4 ;4 3 1 2 ;3 2 4 1 ;4 2 1 3 ;1 2 4 3] et pour B1 on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n=4;
    rows = B1(:,1:n-1);
    cols = B1(:,2:n);
    S2= sum( A( sub2ind(size(A),rows,cols) ) ,2)
    Donc pour B je voudrai S1 et S2, comment je programme ça?

    merci encore

  6. #6
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par linda05 Voir le message
    Bonjour ;
    Merci pour votre réponse , ce que je voudrai par exemple pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q=[1 2 3;3 2 1;4 3 2;5 4 3;2 3 4] ;
    q soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q=[1 2 3 ;4 3 2 ;5 4 3] ;
    d'après votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat =     5     4     3  ??????
    Sachant que j'ai des matrices de très grandes tailles.
    Merci
    123 = 321. 234 = 432. Reste en effet 534 comme seule solution
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

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

    Si j'ai bien compris le premier résultat souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    q = [1 2 3;3 2 1;4 3 2;5 4 3;2 3 4];
    [~, ia, ib] = intersect(q, fliplr(q), 'rows');
    q(ia(ia>ib), :) = []
    Pour l'autre question je ne comprends pas très bien le problème ? Il s'agit d'obtenir B1 à partir de B ?
    D'après ce que je vois les colonnes 3-4 sont inversées, donc :
    Remarque : on peu utiliser le mot clé end à la place de n dans ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rows = B(:,1:n-1);
    cols = B(:,2:n);

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Bonsoir ;
    Merci bien Winjerome,mon problème Il s'agit d'obtenir S1 et S2 à partir de B ‘’sans calculer B1 ‘’est ce que c’est possible ?
    Par exemple si B d’ordre n et la colonne est n-7,donc je voudrai S2 pour la colonne n-7 ?
    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu préciser ce que tu entends par "la colonne n-7" ?

    En reprenant ton exemple précédent, il suffirait de jouer sur les indices des lignes d'obtention de rows et cols :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rows = B(:,[1:2 4]);
    cols = B(:,[2 4 3]);
    À voir pour obtenir un cas plus "général" selon ta définition.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Bonsoir ;
    Merci Winjerome,c'est grace à vous je pense que j’ai trouver la solution :
    Pour B matrice d’ordre n et k variable tel que 1=< k <=n-1 on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rows = B(:,[1:n-k n:-1:n-k+2]);
    cols = B(:,[2:n-k n:-1:n-k+1]);
    S2= sum( A( sub2ind(size(A),rows,cols) ) ,2)
    Donc sans calculer B1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B1=B(:,[1:n-k  n:-1:n-k+1])
    c'est ça non?
    Merci

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

Discussions similaires

  1. suppression des doublons dans une matrice
    Par Décembre dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/09/2012, 17h52
  2. Ajout et suppression de ligne dans une matrice
    Par Ryma_d3 dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/01/2012, 19h35
  3. suppression des lignes d'une matrice
    Par sophielow dans le forum MATLAB
    Réponses: 1
    Dernier message: 01/05/2011, 22h58
  4. Insérer des lignes dans une matrice
    Par you_go dans le forum Fortran
    Réponses: 2
    Dernier message: 21/08/2009, 12h10
  5. Supprimer des lignes dans une matrice
    Par Ptinéwik dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/01/2008, 13h55

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