I want to shift vector values one by one to the left

21 ビュー (過去 30 日間)
Muhammad
Muhammad 2022 年 8 月 30 日
回答済み: Bruno Luong 2022 年 8 月 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 件のコメント
Bruno Luong
Bruno Luong 2022 年 8 月 30 日
=> direction is on the right to my book.
John D'Errico
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 件)

Chunru
Chunru 2022 年 8 月 30 日
num=[1 1 1 0 0 0 0 0]
num = 1×8
1 1 1 0 0 0 0 0
for i=1:3
num = circshift(num, -1)
end
num = 1×8
1 1 0 0 0 0 0 1
num = 1×8
1 0 0 0 0 0 1 1
num = 1×8
0 0 0 0 0 1 1 1

Abderrahim. B
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
num = 1×10
1 1 1 1 0 0 0 0 0 1
num = 1×10
1 1 1 0 0 0 0 0 1 1
num = 1×10
1 1 0 0 0 0 0 1 1 1
num = 1×10
1 0 0 0 0 0 1 1 1 1
num = 1×10
0 0 0 0 0 1 1 1 1 1
  4 件のコメント
Muhammad
Muhammad 2022 年 8 月 30 日
I already had an idea of shifting but it does not fullfill the requirement that i want.
Abderrahim. B
Abderrahim. B 2022 年 8 月 30 日
if you only need the last vector,then use sort function.
sort(yourVectorHere)

サインインしてコメントする。


Bruno Luong
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)
B = 20×10
1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 1 1

Bruno Luong
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)
B = 6×10
1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by