Info
This question is closed. Reopen it to edit or answer.
'How to' Matrix
1 view (last 30 days)
Show older comments
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 Comments
Jan
on 12 Dec 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?
Answers (4)
Walter Roberson
on 12 Dec 2012
Edited: Walter Roberson
on 12 Dec 2012
Have you considered circshift() up by 4 rows?
0 Comments
Azzi Abdelmalek
on 12 Dec 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 Comments
Azzi Abdelmalek
on 12 Dec 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
on 12 Dec 2012
Edited: Andrei Bobrov
on 12 Dec 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 Comment
Jan
on 12 Dec 2012
Edited: Jan
on 12 Dec 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 Comments
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!