Info
La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.
'How to' Matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I have an array with 0 s and 1s.
Example a colomn, 0 ,0 ,0 ,0 , 1.
Now the 1 is on the 5th row, I want to raise that to the first row.
So, in my code i want all the ones to go 4 steps up...
sounds easy, but how :) ?
5 comentarios
Jan
el 12 de Dic. de 2012
Thanks for the clarification, Student. And what happens on the right margin? Is the result shorter, filled with zeros or ones or with the value of the last element?
Respuestas (4)
Walter Roberson
el 12 de Dic. de 2012
Editada: Walter Roberson
el 12 de Dic. de 2012
Have you considered circshift() up by 4 rows?
0 comentarios
Azzi Abdelmalek
el 12 de Dic. de 2012
A=[0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1]
for k=5:length(A)
if A(k)
b=A(k-4:k-1);
A(k-4)=1
A(k-4+1:k)=b
end
end
2 comentarios
Azzi Abdelmalek
el 12 de Dic. de 2012
A=[0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1]
for k=5:length(A)
if A(k) % If A(k) is equal to 1
b=A(k-4:k-1); % store value from k-4 to k-1 in b
A(k-4)=1 % replace value at k-1 by 1
A(k-4+1:k)=b % shift value stored in b
end
end
Andrei Bobrov
el 12 de Dic. de 2012
Editada: Andrei Bobrov
el 12 de Dic. de 2012
other way:
a - your vector - row (eg: [0 0 0 0 1])
n = numel(a);
out = a(hankel(1:n,[n,1:n-1]));
or
out = hankel(a,circshift(a,[0 1]));
1 comentario
Jan
el 12 de Dic. de 2012
Editada: Jan
el 12 de Dic. de 2012
Some ideas:
x = [0, 0, 0, 0, 1];
index = find(x, 1, 'first');
y1 = x(index:end);
y2 = [x(index:end), zeros(1, index - 1)];
y3 = [x(index:end), ones(1, index - 1)];
y4 = [x(index:end), repmat(x(end), 1, index - 1)];
y5 = [x(index:end), x(1:index - 1)];
0 comentarios
La pregunta está cerrada.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!