How to move elements of vector
21 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
julie st cyr
le 10 Déc 2020
Commenté : julie st cyr
le 10 Déc 2020
How would I be able to find certain elements of a vector and move them?
For example, fidning the zeros in a vector and moving them to the right,
so [6 0 9 4; 0 4 0 6; 7 0 8 6; 4 5 0 9]
becomes [6 9 4 0; 4 6 0 0; 7 8 6 0; 4 5 9 0]
I have tried
vec = [vec(vec~=0) vec(vec==0)] but was unsuccessful.
Any help is appreciated thank you!
1 commentaire
Fangjun Jiang
le 10 Déc 2020
Because there are diffferent number of zeros in each row, I think you need to go through a for-loop, do it row by row should be relatively easy.
Réponse acceptée
James Tursa
le 10 Déc 2020
Modifié(e) : James Tursa
le 10 Déc 2020
Could use a loop on the rows with logical indexing. E.g.,
vec = whatever
z = (vec == 0);
for r=1:size(vec,1)
vec(r,:) = [vec(r,~z(r,:)) vec(r,z(r,:))];
end
Plus de réponses (2)
Ameer Hamza
le 10 Déc 2020
Modifié(e) : Ameer Hamza
le 10 Déc 2020
Try this
M = [6 0 9 4; 0 4 0 6; 7 0 8 6; 4 5 0 9];
[~, cols] = sort(M==0,2);
rows = repmat((1:size(M,1)).', 1, size(M,2));
M_new = M(sub2ind(size(M), rows, cols));
Result
>> M_new
M_new =
6 9 4 0
4 6 0 0
7 8 6 0
4 5 9 0
0 commentaires
jessupj
le 10 Déc 2020
i can't think of how you might do this without a loop and maintain the matrix form. but your approach will work row-by-row
for k=1:size(vec,2);
vec(k,:) = [vec(k, vec(k,:)~=0) vec(k, vec(k,:)==0) ];
end
0 commentaires
Voir également
Catégories
En savoir plus sur Characters and Strings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!