[MATLAB] transformer une matrice en vecteur

Fermé
yann - 22 févr. 2008 à 11:27
 atman - 25 juin 2015 à 16:40
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

5 réponses

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
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
atman > matjo
25 juin 2015 à 16:40
merci bro
0
coment ecrire un programme qui ppermet le simplex
0