[MATLAB] transformer une matrice en vecteur

yann -  
 atman -
Bonjour,

Voila j'ai un petit problème à résoudre avec matlab, j'ai une matrice (N,2) avec N etant un nombre variable de lignes.
Je souhaiterai stocker les valeurs de cette matrice dans un vecteur ligne, en utilisant une boucle.

Pour l'instant ca donne a peu pres ca:

BC=[0 1;0 0;1 1]

For i = 1:1:N
BCvecteur = [BC(i,:)]
end

Avec ceci, j'extrais chaque ligne de la matrice,
BCvecteur =

0 1

BCvecteur =

0 0

BCvecteur =

1 1

A ce stade, je souhaiterai obtenir un vecteur BCvecteur = [0 1 0 0 1 1].

Merci pour votre aide, bonne journée
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. yababas
     
    Utilise la commande reshape. ("help reshape" pour avoir les infos)

    Si tu as
    BC=[0 1;0 0;1 1]
    reshape(BC,1,6) te donne [0 0 1 1 0 1] (il parcourt la matrice colonne par colonne).

    Donc ce qu'il te faut faire c'est : reshape(BC',1,6)
    Ainsi les lignes deviennent les colonnes et vice versa et la matrice sera parcourue dans le sens qui te convient.

    Si tu as size(BC) = [N,2], alors tu dois faire reshape(BC',1,2*N).

    Si vraiment tu veux utiliser une boucle malgré tout (ne serait-ce que pour l'aspect pédagogique...) il te faut faire :

    [NI,NJ] = size(BC);

    % créer un vecteur contenant autant de case que la matrice BC
    Z = zeros(1,NI*NJ);

    % pour chacune des lignes
    for i = 1:NI
    % parcours de la ligne
    for j=1:NJ %ou bien : for j=1:2 si tu sais que NJ==2
    Z(NJ*(i-1)+j) = BC(i,j);
    end
    end

    Voilà.
    J'espère que c'est bon comme ça.
    Ciao.
    Yababas.
    30
    1. matjo
       
      beh le plus facile c est d utiliser les :

      BC = [1,0;1,4;1,0];
      tmp = BC(:);

      =>

      tmp =[ 1 0 1 4 1 0 ]

      bcp plus simple qu une boucle
      0
      1. atman > matjo
         
        merci bro
        0
    2. mira
       
      coment ecrire un programme qui ppermet le simplex
      0