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 :

transformer des vecteurs colonne en un seul vecteur ligne


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut transformer des vecteurs colonne en un seul vecteur ligne
    Bonjour,

    Je possède deux vecteurs colonne R0 et R1, chacun de taille <1141x1 double>

    Mon problème :
    Je souhaite transformer ces deux vecteurs colonne en un seuls vecteur ligne mais en prenant une fois R0 et une fois R1, c.à.d
    R=[R0(i) R1(j) R0(i+1) R1(j+1) ..........R0(i+n) R1(j+n) ]

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance en conception mécanique et prototypage
    Inscrit en
    novembre 2006
    Messages
    20 162
    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 162
    Points : 54 295
    Points
    54 295
    Par défaut
    As-tu au moins essayé avec une boucle FOR-END ?
    Cela ne me semble pas si compliqué, si ?
    Ingénieur indépendant en conception mécanique et prototypage :
    • conception mécanique 3D (Autodesk Fusion 360)
    • impression 3D (Ultimaker)
    • développement informatique (Python, MATLAB, C)
    • programmation de microcontrôleur (Microchip PIC, 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)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Salut,

    Je suis débutant aussi donc je propose quelque chose mais peut etre que ce n'est pas le mieu ^^

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    R0 = ['a'; 'b'; 'c'; 'd'];
    R1 = ['e'; 'f'; 'g'; 'h'];
    R3 = [];
     
     
    %# rempli les colonnes impairs
    ydx = 1;
    idx = 1;
    while idx ~= length(R0)+1
        toto = mod(ydx,2);
        if toto ~= 0         
                R3{ydx} = R0(idx);
                idx = idx + 1;        
        end    
        ydx = ydx + 1;    
    end
     
     
    %# rempli les colonnes pairs 
    ydx = 1;
    idx = 1;
    while idx ~= length(R1)+1
        toto = mod(ydx,2); 
        if toto ~= 1      
                R3{ydx} = R1(idx);
                idx = idx + 1;        
        end    
        ydx = ydx + 1;    
    end
    Voilou

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    août 2007
    Messages
    4 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : août 2007
    Messages : 4 638
    Points : 7 612
    Points
    7 612
    Par défaut
    Bonjour,

    ce n'est pas forcément optimisé, mais au moins ton code n'a pas d'erreur, et il fait ce que tu as décrits.

    Quelques remarques :
    utilise plutôt des boucles for à la place des boucles while sur les indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for idx = 1:length(R0)
    ...
    Cela permet d'éviter les boucles infinies qui peuvent se produire avec les while, et cela évite d'avoir à augmenter manuellement les indices.


    Tu peux réunir les 2 boucles dans la même boucle, en utilisant if...else :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if toto == 0 
    ...
    elseif toto == 1
    ...
    Y-a-t-il une raison pour laquelle tu utilises un tableau de cellules pour R3?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Du coup j'ai modifié un peu ^^

    Pour R3 euh j'ai mis car sinon le tebleau ne se reinitialisait pas


    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
     
    R0 = ['a'; 'b'; 'c'; 'd'];
    R1 = ['e'; 'f'; 'g'; 'h'];
    R3 = [];
     
     
     
    R3Length = length(R0) + length(R1);
    ydx = 1;
    for idx = 1:R3Length    
        toto = mod(idx,2);
        %# si pairs
        if toto == 0      
            R3{idx} = R1(ydx);
            ydx = ydx + 1;
        %# si impairs
        elseif toto == 1
            R3{idx} = R0(ydx);            
        end  
    end

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    août 2007
    Messages
    4 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : août 2007
    Messages : 4 638
    Points : 7 612
    Points
    7 612
    Par défaut
    Citation Envoyé par Pitchan Voir le message
    Pour R3 euh j'ai mis car sinon le tebleau ne se reinitialisait pas
    Ok mais pour R3, tu utilises des accolades, qui définissent un tableau de cellule, je voulais savoir si c'était volontaire ou non. Apparemment non...

    Dans ton code, on peut supprimer la variable ydx, Par exemple :
    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
    R0 = ['a'; 'b'; 'c'; 'd'];
    R1 = ['e'; 'f'; 'g'; 'h'];
    R3 = [];
     
    R3Length = length(R0) + length(R1);
    for idx = 1:R3Length    
        toto = mod(idx,2);
        %# si pairs
        if toto == 0      
            R3{idx} = R1(round(idx/2));
        %# si impairs
        elseif toto == 1
            R3{idx} = R0(round(idx/2));            
        end  
    end

    Ensuite, tout dépend de ce que tu veux obtenir mais tu peux aussi utiliser R3 comme un tableau de charactères :
    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
    R0 = ['a'; 'b'; 'c'; 'd'];
    R1 = ['e'; 'f'; 'g'; 'h'];
    R3 = char([]);
    
    
    
    R3Length = length(R0) + length(R1);
    ydx = 1;
    for idx = 1:R3Length    
        toto = mod(idx,2);
        %# si pairs
        if toto == 0      
            R3(idx) = R1(ydx);
            ydx = ydx + 1;
        %# si impairs
        elseif toto == 1
            R3(idx) = R0(ydx);            
        end  
    end
    Et alors le code peut même se simplifier en travaillant directement sur les tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    R0 = ['a'; 'b'; 'c'; 'd'];
    R1 = ['e'; 'f'; 'g'; 'h'];
    R3 = char(zeros(1,2*numel(R0)));
    R3(1:2:end) = R0;
    R3(2:2:end) = R1;
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup ca m'aide aussi du coup ^^

Discussions similaires

  1. transformer un vecteur ligne en vecteur colonne
    Par samiov dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/03/2010, 10h42
  2. Ecrire dans un fichier .txt des vecteurs colonnes
    Par rouxmasta dans le forum MATLAB
    Réponses: 4
    Dernier message: 30/11/2009, 11h20
  3. Ecrire des vecteurs colonnes dans un fichier text
    Par Ballim dans le forum MATLAB
    Réponses: 6
    Dernier message: 14/11/2008, 10h08
  4. Sauver des variables sous forme de vecteurs colonnes
    Par gmachi10 dans le forum MATLAB
    Réponses: 3
    Dernier message: 01/08/2008, 12h23
  5. transformer des colonnes en lignes
    Par flonardi dans le forum Oracle
    Réponses: 13
    Dernier message: 28/10/2004, 13h43

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