I want to shift vector values one by one to the left
Show older comments
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
Bruno Luong
on 30 Aug 2022
=> direction is on the right to my book.
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.
Answers (4)
num=[1 1 1 0 0 0 0 0]
for i=1:3
num = circshift(num, -1)
end
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 Comments
Muhammad
on 30 Aug 2022
Chunru
on 30 Aug 2022
Do you get a rule of shifting data?
Muhammad
on 30 Aug 2022
Abderrahim. B
on 30 Aug 2022
if you only need the last vector,then use sort function.
sort(yourVectorHere)
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)
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)
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!