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 :

Éléments non inclus dans un autre tableau


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 Éléments non inclus dans un autre tableau
    Bonjour à tous;
    Si j’ai une matrice A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A=[4     6     7
         6     4     7
         6     7     4] ;
    Et un vecteur V :

    Ce que je voudrais c’est transformer les éléments de A qui ne sont pas ds l’intersection de A et V (A-(A∩V))
    avec les éléments de V qui ne sont pas ds l’intersection de A et V (V-(A∩V))

    ds l’exemple on a :

    [4 7] avec [3 5]

    Donc A soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A= [3     6     5
         6     3     5
         6     5     3]
    J’ai écrit ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    X=setdiff(A(1,:), V)
     Y=setdiff( V,A(1,:))
        for r=1:length(X)
            A = A-(X(r)-Y(r))*(A==X(r))+(X(r)-Y(r))*(A==Y(r));
        end
    avez vous une autre idée?
    merciiiiiiii

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    setxor fait directement la différence symétrique d'ensemble.
    Comment sais tu que le 4 correspond au 3 et pas au 5 ?
    Que se passe-t'il si tes deux ensembles [4 7] et [3 5] n'ont au final pas le même cardinal ?

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Comment sais tu que le 4 correspond au 3 et pas au 5 ?
    4 correspond au 3 ou au 5, c'est la même chose .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Que se passe-t'il si tes deux ensembles [4 7] et [3 5] n'ont au final pas le même cardinal ?
    Les deux ensembles sont toujours de même cardinal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setxor fait directement la différence symétrique d'ensemble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setxor(A(1,:),V)=[  3     4     5     7];
    Comment je sais si tel élément est appartient a tel ensemble ?

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    c'est la même chose
    A(1,: )= [3 6 5] est différent de A(1,: )= [5 6 3] non ?
    Comment je sais si tel élément est appartient a tel ensemble ?
    Avec plusieurs output: doc setxor.

  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
    A(1,: )= [3 6 5] est différent de A(1,: )= [5 6 3] non ?
    j'ai une matrice symétrique.

    Voilà ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [C,iA,iV]=setxor(A(1,:),V)
    for r=1:length(iV)
            A = A-(V(iV(r))-A(1,iA(r)))*(A==V(iV(r)))+(V(iV(r))-A(1,iA(r)))*(A==A(1,iA(r)));
    end
    Est-il possible de le faire sans une boucle?

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Peut-être comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A=[4     6     7
         6     4     7
         6     7     4] ;
     
     V=[6     5     3] ;
     
     X=setdiff(A(1,:), V);
     Y=setdiff( V,A(1,:));
     
     [Li,Lj]=ismember(A,X);
     
     A(Li) = Y(Lj(Li))

  7. #7
    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, Je vous remercie pour votre réponse , j'ai fait quelques modifications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [~,iA,iV]=setxor(A(1,:),V)
      [Li,Lj]=ismember(A,A(1,iA));
      Y=V(iV)
       A(Li) = Y(Lj(Li))
    Mais toujours ça prend du temps, est ce que c’est la meilleure façon ?

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Rendu là, c'est de voir si tu peux remplacer certaines fonctions de MatLab par des équivalents simplifiés spécifiques à ton problème.

    Par exemple, remplacer setxor. Vaut-il mieux cette petite boucle spécialisée ou setxor ?

    Ensuite, voir ce qu'il y a à faire pour ismember. Tu peux analyser avec profile : http://www.mathworks.com/help/matlab/ref/profile.html

    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
    clear all;
    clc;
     
    A = [4     6     7
         6     4     7
         6     7     4] ;
     
    V = [6     5     3] ;
     
    T = false(1,numel(A(1,:)));
    S = false(1,numel(V));
    for i = 1:numel(V)
        tmp = (A(1,:) == V(i));
        T = (T | tmp);
        S(i) = any(tmp);
    end
     
    [Li,Lj] = ismember(A,A(1,~T));
    Y = V(~S)
    A(Li) = Y(Lj(Li))

  9. #9
    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
    Tu peux analyser avec profile
    Oui je travail avec profile.

    Vaut-il mieux cette petite boucle spécialisée ou setxor ?
    Je trouve que la boucle est mieux que sextor,donc j’écrit ce code :

    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
    A = [4     6     7
         6     4     7
         6     7     4] ;
     
    V = [6     5     3] ;
     
     
    T = false(1,numel(A(1,:)));
    S = false(1,numel(V));
    for i = 1:numel(V)
        tmp = (A(1,:) == V(i));
        T = (T | tmp);
        S(i) = any(tmp);
    end
    iA=A(1,~T)
    iV=V(~S)
     
    for r=1:length(iV)
            A = A-(iV(r)-iA(r))*(A==iV(r))+(iV(r)-iA(r))*(A==iA(r));
    end
    Pour ismember , Je ne sais pas quoi faire, je ne trouve aucune procédure simple.
    Merci

Discussions similaires

  1. Liste d'éléments inclus dans une autre ?
    Par bertry dans le forum MATLAB
    Réponses: 0
    Dernier message: 09/04/2012, 21h13
  2. Réponses: 8
    Dernier message: 30/09/2011, 10h21
  3. Réponses: 5
    Dernier message: 19/02/2009, 17h00
  4. Numero non present dans une autre table
    Par AlphonseBrown dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/02/2005, 12h37
  5. Probleme de composant inclus dans un autre.
    Par viro dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/04/2004, 15h44

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