how to reverse a matrix from bottom to top row wise and then pick out odd rows?

hello
if i have this matrix A =
10000
00010
10101
10011
10000
00001
the rows can be from 1 to 2.^m-2 where m lets say 5. so that gives us 30 rows. i want to flip these rows from bottom to top so that the last row is the first, the second last becomes the second, the third last the third.
flipped A =
00001
10000
10011
10101
00010
10000
then i want to pick the odd numbered rows from the flipped order (the first, third, fifth) such that 1:2:2t rows are picked out and displayed as shown below (here t = 3)
00001
10011
00010
can anyone help out with this?
regards

1 comentario

What doe "matrix A = 10000 ..." exactly mean? Is this a CHAR matrix /then you forgot the quotes), or a double matrix (then the leading zeros are meaningless). It is not clear, what "the rows can be from 1 to 2.^m-2" means. Do you mean the size of the matrix or the decimal representatioon of the values of the elements or rows?

Iniciar sesión para comentar.

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 24 de Abr. de 2013
Editada: Andrei Bobrov el 24 de Abr. de 2013
A =[10000
00010
10101
10011
10000
00001];
A = num2str(A);
b = strrep(A(:)',' ','0');
A(:) = b; % A is string
out1 = flipud(A);
out2 = out1(1:2:end,:);
ADD after the Malik's comment
A = [ 1 1 0 0 0 0
1 0 1 0 0 1
1 0 1 0 0 1
1 0 1 1 1 1
1 0 1 0 0 1
1 1 1 0 1 1
1 0 1 1 1 1
1 1 1 1 0 1
1 0 1 0 0 1
1 1 1 0 1 1
1 1 1 0 1 1
1 1 0 1 1 1
1 0 1 1 1 1
1 1 0 1 1 1
1 1 1 1 0 1
1 0 0 1 0 1
1 0 1 0 0 1
1 0 1 1 1 1
1 1 1 0 1 1
1 1 1 1 0 1
1 1 1 0 1 1
1 1 0 1 1 1
1 1 0 1 1 1
1 0 0 1 0 1
1 0 1 1 1 1
1 1 1 1 0 1
1 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 1
1 0 0 1 0 1
1 0 0 1 0 1];
out1 = flipud(A);
out2 = out1(1:2:end,:);

6 comentarios

this does not work with a big matrix as below:
1 1 0 0 0 0
1 0 1 0 0 1
1 0 1 0 0 1
1 0 1 1 1 1
1 0 1 0 0 1
1 1 1 0 1 1
1 0 1 1 1 1
1 1 1 1 0 1
1 0 1 0 0 1
1 1 1 0 1 1
1 1 1 0 1 1
1 1 0 1 1 1
1 0 1 1 1 1
1 1 0 1 1 1
1 1 1 1 0 1
1 0 0 1 0 1
1 0 1 0 0 1
1 0 1 1 1 1
1 1 1 0 1 1
1 1 1 1 0 1
1 1 1 0 1 1
1 1 0 1 1 1
1 1 0 1 1 1
1 0 0 1 0 1
1 0 1 1 1 1
1 1 1 1 0 1
1 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 1
1 0 0 1 0 1
1 0 0 1 0 1
the out2 is: 1000000001000001 1001001001000001 1001000001001001 1000001001001001 1001000001001001 1001001000001001 1001001000001001 1000001000000001 1001001001000001 1000001001001001 1001001000001001 1000001000000001 1000001001001001 1000001000000001 1000001000000001 1001000000000000 (in a single column) and the length of each row has changed dont know why
see ADD part in my answer.
yes it works! Thanks!
i have another question and since it is linked to this i find it convenient to post it right here, if i need to take the lcm of the binary rows that have come ut finally in out2 i am doing this:
converting each row to dec using num2str(bin2dec(out2(:))) (but doesnt work )
then applying lcm (out3)
% but the lcm function wont work for more than two numbers which is pretty challenging here, how to work through this?
i have converted out3 = num2str(out2(:)) to string this way.
Now to convert out3 to decimal i need to pick the string 5 at a time and convert to dec: bin2dec(out3(1:end)) then take the lcm of all the integers.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 24 de Abr. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by