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

30 views (last 30 days)

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

John D'Errico
on 30 Aug 2022

### Answers (4)

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

##### 4 Comments

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)

##### 0 Comments

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)

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!