shift matrix from a specific row

6 vues (au cours des 30 derniers jours)
negin tebyani
negin tebyani le 9 Fév 2018
Commenté : KL le 9 Fév 2018
I have a matrix that I need to shift some rows according to a special number i, for example if i=3 I have to shift all rows from row 3 down because I have to add new elements to that row, so I should shift all the rows after this one (rows 1 and 2 have to stay the same.) for doing this I added a new row to my matrix with all elements of zero, and now I have to shift this row of zeros (which is the last row) to the i'th row. for example:
i=3
a=[1,2,3;4,5,6;7,8,9,10,11,12]
and I want to add b=[8,8,8] to the third row, so rows: 7,8,9 and 10,11,12 have to shift down. after adding row of zeros:
a=[1,2,3;4,5,6;7,8,9,10,11,12;0,0,0]
and then row 0,0,0 should be shifted to the third row which is 7,8,9 and row 7,8,9 should shift to 4th row and so on.. how can I do this in matlab?

Réponse acceptée

Geoff Hayes
Geoff Hayes le 9 Fév 2018
negin - if you want to insert b as the third row of a then you could just do
a = [1,2,3;4,5,6;7,8,9;10,11,12];
b = [8 8 8];
a = [a(1:2,:) ; b ; a(3:end,:)];
In the above, we just concatenate the first two rows of a (that is, a(1:2,:)) with b and then with the remaining rows of a to get
a =
1 2 3
4 5 6
8 8 8
7 8 9
10 11 12

Plus de réponses (1)

KL
KL le 9 Fév 2018
Pretty much the same answer as Geoff Hayes' but just with a handle,
add_row = @(ind,a) [a(1:ind-1,:); zeros(1,size(a,2)); a(ind:end,:)];
ind=3
a=[1,2,3;4,5,6;7,8,9;10,11,12]
b = add_row(ind,a)
  2 commentaires
negin tebyani
negin tebyani le 9 Fév 2018
thank you for the answer
KL
KL le 9 Fév 2018
You're very welcome!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by