MATLAB Answers

0

'How to' Matrix

Asked by Hello kity on 12 Dec 2012

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 Simon
on 12 Dec 2012

@Student: The question remains, what "raise to the first row" exactly means. At first I guess it is the "first column", but "raising" can be swapping, shifting, circular shifting, sorting, cropping or any procedure I cannot imagine currently.

I meant shifting, shifting the 1 on the 4th row to the 1st.

Jan Simon
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?

Log in to comment.

Products

No products are associated with this question.

4 Answers

Answer by Walter Roberson
on 12 Dec 2012
Edited by Walter Roberson
on 12 Dec 2012

Have you considered circshift() up by 4 rows?

  0 Comments

Log in to comment.


Azzi Abdelmalek
Answer by 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

Would you comment this code step by step, I dont get how you do this...

thank you

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

Log in to comment.


Andrei Bobrov
Answer by Andrei Bobrov
on 12 Dec 2012
Edited by 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

thank you,

afterwards i use Q=out(:,5);

Log in to comment.


Jan Simon
Answer by Jan Simon
on 12 Dec 2012
Edited by Jan Simon
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

Log in to comment.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!