I want to shift vector values one by one to the left
6 ビュー (過去 30 日間)
表示 古いコメント
Hello everyone,
I have a binary vector with five 0 and three 1.
num=[1 1 1 0 0 0 0 0]
and I want to shift each 1 left, shift one value as
num=[1 1 0 1 0 0 0 0]
untill I get a complete shift of the vector values and printing of each vector shift
num=[0 0 0 0 0 1 1 1]
any helpfull code of the above program with nested for loop will be highly appreciated
Thanks
2 件のコメント
John D'Errico
2022 年 8 月 30 日
PLEASE STOP POSTING MULTIPLE TIMES. You have posted the exact same question now three times. One I have now closed.
回答 (4 件)
Abderrahim. B
2022 年 8 月 30 日
What about this:
num = [1 1 1 1 1 0 0 0 0 0] ;
for ii = 1: nnz(num)
num = circshift(num, -1)
end
4 件のコメント
Abderrahim. B
2022 年 8 月 30 日
if you only need the last vector,then use sort function.
sort(yourVectorHere)
Bruno Luong
2022 年 8 月 30 日
編集済み: Bruno Luong
2022 年 8 月 30 日
Is it what you want?
num = [1 1 0 1 0 1 0 1 0 0];
j = find(num);
m = length(j);
l = (-m+1:0)+(length(num))-j;
q = sum(l)+1;
J = zeros(q,m);
i = 1;
J(i,:) = j;
for k=m:-1:1
for n=1:l(k)
i = i+1;
j(k) = j(k)+1;
J(i,:) = j;
end
end
I = repmat((1:q)',1,m);
B = accumarray([I(:) J(:)],1)
0 件のコメント
Bruno Luong
2022 年 8 月 30 日
May be this?
num = [1 1 0 1 0 1 0 1 0 0];
j = find(num);
m = length(j);
J=repmat(j,m,1);
for i=m:-1:1
J(m-i+1:end,i) = length(num)+i-m;
end
J = [j; J];
I = repmat((1:m+1)',1,m);
B = accumarray([I(:) J(:)],1)
0 件のコメント
参考
カテゴリ
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!