Borrar filtros
Borrar filtros

Changing matrix column order

72 visualizaciones (últimos 30 días)
Penny Ibil
Penny Ibil el 18 de Mayo de 2020
Comentada: Walter Roberson el 18 de Mayo de 2020
An having difficulty expressing the result I would like, but it is shown in the example below. How can I change the order of matrix A's columns so that they are like matrix B, regardless of the data values.
A =
1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333
B =
1 11 111 2 22 222 3 33 333
1 11 111 2 22 222 3 33 333
1 11 111 2 22 222 3 33 333

Respuesta aceptada

Walter Roberson
Walter Roberson el 18 de Mayo de 2020
reshape(permute(reshape(A,size(A,1),3,[]),[1 3 2]),size(A,1),[])
  3 comentarios
Penny Ibil
Penny Ibil el 18 de Mayo de 2020
Can you explain what the [1 3 2] as the dimorder means?
Walter Roberson
Walter Roberson el 18 de Mayo de 2020
permute(X, [1 3 2]) means that dimension 1 should stay the same, and what was dimension 3 should become the new dimension 2, and that what was dimension 2 should become the new third dimension.
permute() is a generalization of transpose(). It moves elements around.
for I = 1 : size(A, 1)
for J = 1 : size(A,2)
for K = 1 : size(A,3);
output(I, K, J) = A(I, J, K);
end
end
end

Iniciar sesión para comentar.

Más respuestas (1)

Ameer Hamza
Ameer Hamza el 18 de Mayo de 2020
Editada: Ameer Hamza el 18 de Mayo de 2020
For this particular example
A = ...
[1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333
1 2 3 11 22 33 111 222 333];
idx = [1 4 7 2 5 8 3 6 9];
B = A(:, idx);
Result
>> B
B =
1 11 111 2 22 222 3 33 333
1 11 111 2 22 222 3 33 333
1 11 111 2 22 222 3 33 333
1 11 111 2 22 222 3 33 333
Is there a general rule that can be expressed mathematically?
  2 comentarios
Penny Ibil
Penny Ibil el 18 de Mayo de 2020
I want to say that it has something to do with getting the modulo, but I can't quite see it:
>> mod(1:length(A),3)
ans =
1 2 0 1 2 0 1 2 0
Ameer Hamza
Ameer Hamza el 18 de Mayo de 2020
Do you want to move all columns start with 1 to the left in increasing order, then columns of 2, then 3, so on. Something like this?

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by