web-dev-qa-db-fra.com

Ajouter une ligne à une matrice

J'ai une matrice A comme

1 2 3 4 5
6 7 8 9 0

et je veux l'étendre avec une rangée de ceux pour obtenir

1 1 1 1 1
1 2 3 4 5
6 7 8 9 0 

Je crée la rangée de ceux avec

col_size = size(A, 2); 
ones_row = ones(1, col_size);

Comment puis-je ajouter mon ones_row à la matrice?

19
andandandand

Une fois que vous avez A et ones_row tu fais:

[ones_row; A]

Cela renvoie ce qui suit.

1 1 1 1 1
1 2 3 4 5
6 7 8 9 0
39
David Alber

Je le ferais probablement comme suggéré dans la réponse précédente , cependant dans certains cas (lorsque les tailles de matrice deviennent très grandes), une solution plus conviviale en mémoire serait de préallouer une matrice de la taille correcte et d'utiliser indexation pour mettre les valeurs existantes au bon endroit:

A = [ 1 2 3 4 5; 6 7 8 9 0 ];
B = ones(size(A) + [1,0]); % Create an array of ones that is one row longer
B(2:end,:) = A;            % Replace the elements of B with elements from A

La raison pour laquelle je dis que cela est plus convivial en mémoire est parce que lorsque nous créons une ligne d'unités, nous devons allouer de la mémoire pour un vecteur, puis lorsque nous concaténons, nous devons à nouveau allouer de la mémoire pour le résultat de la concaténation. Lorsque nous utilisons l'indexation, il n'est pas nécessaire d'allouer un vecteur intermédiaire. Ce n'est pas vraiment important dans cet exemple, mais peut être assez important pour des matrices plus grandes ou des opérations effectuées des milliers de fois.


Il y a aussi une fonction utile dans la Boîte à outils de traitement d'image - padarray :

A = [ 1 2 3 4 5; 6 7 8 9 0 ];
B = padarray(A,[1 0],1,'pre');
2
Dev-iL