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

33 visualizzazioni (ultimi 30 giorni)
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 Commenti
Bruno Luong
Bruno Luong il 30 Ago 2022
=> direction is on the right to my book.
John D'Errico
John D'Errico il 30 Ago 2022
PLEASE STOP POSTING MULTIPLE TIMES. You have posted the exact same question now three times. One I have now closed.

Accedi per commentare.

Risposte (4)

Chunru
Chunru il 30 Ago 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 il 30 Ago 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 Commenti
Muhammad
Muhammad il 30 Ago 2022
I already had an idea of shifting but it does not fullfill the requirement that i want.
Abderrahim. B
Abderrahim. B il 30 Ago 2022
if you only need the last vector,then use sort function.
sort(yourVectorHere)

Accedi per commentare.


Bruno Luong
Bruno Luong il 30 Ago 2022
Modificato: Bruno Luong il 30 Ago 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 il 30 Ago 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

Community Treasure Hunt

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

Start Hunting!

Translated by