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 :

Mettre des string dans un matrice


Sujet :

MATLAB

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut Mettre des string dans un matrice
    Bonjour,

    Je voudrais créer par exeple 5 strings de cette forme : 'P1', 'P2, 'P3', 'P4', 'P5', est les rentrer dans un matrice verticale de taille (5,1) de telle sorte à obtenir :
    M = 
        'P1'
        'P2'
        'P3'
        'P4'
        'P5'
    
    J'ai voulu faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i=1:5
            p = ['P'+num2str(i)];
            M(i,1) = p;
    end
    mais ca ne marche pas, j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >> M
     
    M =
     
       129
       130
       131
       132
       133
    Est ce que quelqu'un pourrait me dire comment faire ?

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i=1:5
            p = ['P' num2str(i)];
            M(i,:) = p;
    end
    plus propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    M=[];
    for ii=1:5
      M = vertcat(M,['P' num2str(i)]);
    end
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vI = 1:5;
    M = [repmat('P',length(vI),1) num2str(vI.')];
    et le mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vI = 1:5;
    M = sprintf('p%d\n',vI.');
    et si tu va plus loin que 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vI = 1:15;
    M = sprintf('p%02d\n',vI.');

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La concaténation se fait exclusivement avec les crochets [], pas avec le signe '+' qui sert seulement à l'addition.
    Donc lorsque tu fais 'P'+num2str(i), tu ajoutes les valeurs ASCII de 'P' et '1', '2', '3', '4', '5' :
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    double('P') = 80 + 
        double('1') = 49  
        double('2') = 50
        double('3') = 51
        double('4') = 52
        double('5') = 52
    une simple concaténation donc comme te le montre le fab dans sa première solution : ['P' num2str(i)].

    Un deuxième problème qui se pose est l'espace dans lequel tu souhaites stocker tes 'Pi'. En effet une chaîne de caractères n'est rien d'autre qu'un tableau de char. Ainsi 'P1' équivaut à ['P' '1']. 'P' et '1' qui sont donc respectivement stockés dans M(1,1) et M(1,2) et non pas seulement M(1,1).

    Suite à cela tu te doutes bien que pour des valeurs supérieures ou égales à 10, il te faudra un tableau de 3 colonnes, et ainsi de suite. Invalidant les deux premières solutions de le fab car MATLAB n'aime pas concaténer des tableaux de tailles différentes. On préfèrera dans la majorité des cas utiliser un tableau de cellules. Deux solutions pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cellstr(num2str(v.', 'P%d'))
     
    strcat({'P'},num2str(v.'))
    @le fab Attention à tes solutions avec sprintf, elles ne créent qu'un vecteur ligne comportant le caractère '\n'. Ce qui rend la manipulation difficile.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 134
    Points : 134
    Points
    134
    Par défaut
    Merci pour vos réponse,

    Je vais me pencher sur les cell puisqu'il me faut plus de 10 valeurs.
    Merci encore

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    @le fab Attention à tes solutions avec sprintf, elles ne créent qu'un vecteur ligne comportant le caractère '\n'. Ce qui rend la manipulation difficile.
    ah oui en effet
    ArnaudFu13, oublies ces deux "solutions"

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2012, 17h32
  2. mettre des vecteurs dans une matrice
    Par thtghgh dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/01/2010, 19h03
  3. mettre des caractères dans une string
    Par will2taz dans le forum VB.NET
    Réponses: 13
    Dernier message: 13/11/2007, 18h11
  4. Réponses: 3
    Dernier message: 13/09/2007, 19h26
  5. Mettre des espaces dans une string à intervalles réguliers.
    Par benitoelputoamo dans le forum Général Python
    Réponses: 3
    Dernier message: 15/11/2006, 17h14

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