'How to' Matrix

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

Walter Roberson
Walter Roberson am 12 Dez. 2012
What if there is a 1 in the first 4 columns?
Also, should the new matrix have fewer columns?
TAB
TAB am 12 Dez. 2012
Then what should be left in 5th column (or row in your words) ?
Jan
Jan am 12 Dez. 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.
Hello kity
Hello kity am 12 Dez. 2012
I meant shifting, shifting the 1 on the 4th row to the 1st.
Jan
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
Walter Roberson am 12 Dez. 2012
Bearbeitet: Walter Roberson am 12 Dez. 2012

0 Stimmen

Have you considered circshift() up by 4 rows?
Azzi Abdelmalek
Azzi Abdelmalek am 12 Dez. 2012

0 Stimmen

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

Hello kity
Hello kity am 12 Dez. 2012
Would you comment this code step by step, I dont get how you do this...
thank you
Azzi Abdelmalek
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
Andrei Bobrov am 12 Dez. 2012
Bearbeitet: Andrei Bobrov am 12 Dez. 2012

0 Stimmen

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

Hello kity
Hello kity am 12 Dez. 2012
thank you,
afterwards i use Q=out(:,5);
Jan
Jan am 12 Dez. 2012
Bearbeitet: Jan am 12 Dez. 2012

0 Stimmen

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)];

Diese Frage ist geschlossen.

Gefragt:

am 12 Dez. 2012

Geschlossen:

am 20 Aug. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by