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 :

position dans matrice


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : mars 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut position dans matrice
    Bonjour,

    Je dois traiter une matrice dont les éléments ont la forme suivante :
    1 1 1 1 2 2 3 3 3 3 4 4 2 2 2 2 2 2
    je voudrais pouvoir obtenir une matrice contenant le numéro (1, 2 3 et 4) avec sa première position et sa dernière.
    Pour mon exemple, je devrais obtenir :
    1 1 4
    2 5 6
    3 7 10
    4 11 12
    2 13 18.
    J'ai une solution en effectuant une boucle for, mais j'aurai voulu savoir si une solution plus rapide existe.

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    2 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 2 020
    Points : 2 807
    Points
    2 807
    Par défaut
    Bonjour,

    Une première approche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    clear
    x=[1 1 1 1 2 2 3 3 3 3 4 4 2 2 2 2 2 2];
    [C,IA,IC]=unique(x)
    D=diff(x)
    F=find(D~=0)
    R=[C' IA F']

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : mars 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'avais essayé avec la fonction unique mais je perds les données de fin de la matrice (retour à 2)

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    mai 2008
    Messages
    2 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 2 020
    Points : 2 807
    Points
    2 807
    Par défaut
    Bonjour,

    Un peu tiré par les cheveux.
    Sans doute pas robuste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    clear
    x=[1 1 1 1 2 2 3 3 3 3 4 4 2 2 2 2 2 2];
    xx=[x max(x)+1];
    [C,IA,~]=unique(xx);
    IA(end)=IA(end)-C(end)-1;
    D=diff([[xx]]);
    F=find(D~=0);
    R=[x(F)' IA F']

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance en conception mécanique et prototypage

    Informations forums :
    Inscription : novembre 2006
    Messages : 20 145
    Points : 54 249
    Points
    54 249
    Par défaut
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    M = [1 1 1 1 2 2 3 3 3 3 4 4 2 2 2 2 2 2]
     
    idxA = [1 diff(M)]~=0;
     
    idxB = find(idxA);
     
    idxC = [idxB(2:end)-1 numel(M)];
     
    [M(idxA(:)).' idxB(:) idxC(:)]
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ans =
     
         1     1     4
         2     5     6
         3     7    10
         4    11    12
         2    13    18
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (MATLAB, Python, C)
    • programmation de microcontrôleur (Microchip PIC)

    « 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)

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    mars 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : mars 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Jerome Briot Voir le message
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    M = [1 1 1 1 2 2 3 3 3 3 4 4 2 2 2 2 2 2]
     
    idxA = [1 diff(M)]~=0;
     
    idxB = find(idxA);
     
    idxC = [idxB(2:end)-1 numel(M)];
     
    [M(idxA(:)).' idxB(:) idxC(:)]
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ans =
     
         1     1     4
         2     5     6
         3     7    10
         4    11    12
         2    13    18
    Merci pour cette solution.
    Mon problème est résolu

Discussions similaires

  1. Position dans une query
    Par valoji dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/01/2006, 10h49
  2. Position dans liste
    Par Pascal28 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2006, 18h41
  3. Réponses: 5
    Dernier message: 20/02/2005, 01h14
  4. [Win32] Position dans un fichier
    Par vecchio dans le forum Windows
    Réponses: 7
    Dernier message: 22/03/2004, 16h47
  5. [VB6] Sauvegarder la position dans un Recordset
    Par inotna2099 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 29/04/2003, 17h35

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