Info
Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.
'How to' Matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Jan
am 12 Dez. 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?
Antworten (4)
Walter Roberson
am 12 Dez. 2012
Bearbeitet: Walter Roberson
am 12 Dez. 2012
Have you considered circshift() up by 4 rows?
0 Kommentare
Azzi Abdelmalek
am 12 Dez. 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 Kommentare
Azzi Abdelmalek
am 12 Dez. 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
am 12 Dez. 2012
Bearbeitet: Andrei Bobrov
am 12 Dez. 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 Kommentar
Jan
am 12 Dez. 2012
Bearbeitet: Jan
am 12 Dez. 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 Kommentare
Diese Frage ist geschlossen.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!