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

2 views (last 30 days)
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 Comments
John D'Errico
John D'Errico on 30 Aug 2022
PLEASE STOP POSTING MULTIPLE TIMES. You have posted the exact same question now three times. One I have now closed.

Sign in to comment.

Answers (4)

Chunru
Chunru on 30 Aug 2022
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 on 30 Aug 2022
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 Comments
Abderrahim. B
Abderrahim. B on 30 Aug 2022
if you only need the last vector,then use sort function.
sort(yourVectorHere)

Sign in to comment.


Bruno Luong
Bruno Luong on 30 Aug 2022
Edited: Bruno Luong on 30 Aug 2022
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 on 30 Aug 2022
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

Categories

Find more on Loops and Conditional Statements 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!