How to move elements of vector
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
julie st cyr
am 10 Dez. 2020
Kommentiert: julie st cyr
am 10 Dez. 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 Kommentar
Fangjun Jiang
am 10 Dez. 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.
Akzeptierte Antwort
James Tursa
am 10 Dez. 2020
Bearbeitet: James Tursa
am 10 Dez. 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
Weitere Antworten (2)
Ameer Hamza
am 10 Dez. 2020
Bearbeitet: Ameer Hamza
am 10 Dez. 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 Kommentare
jessupj
am 10 Dez. 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 Kommentare
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!