How to move elements of vector
27 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Fangjun Jiang
2020 年 12 月 10 日
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.
採用された回答
James Tursa
2020 年 12 月 10 日
編集済み: James Tursa
2020 年 12 月 10 日
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
その他の回答 (2 件)
Ameer Hamza
2020 年 12 月 10 日
編集済み: Ameer Hamza
2020 年 12 月 10 日
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 件のコメント
jessupj
2020 年 12 月 10 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Characters and Strings についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!