Reordering columns in a matrix

Hello,
I want to multiply 2 matrices elemntwise and swap columns 1 and 2 in the result:
A = [1 2 3; 1 2 3; 1 2 3; 1 2 3];
B = -1*ones(size(A));
AB = A.*B;
C = AB(:,[2 1 3]);
I am using 2 steps to do this (lines 3 & 4). How do I do this in a single step (single line of code)?

1 comentario

Jan
Jan el 30 de Dic. de 2011
More efficient than -1*ones:
B = -ones(size(A));
or
B = repmat(-1, size(A));

Iniciar sesión para comentar.

Respuestas (5)

the cyclist
the cyclist el 30 de Dic. de 2011

0 votos

I guess you could do
C = A(:,[2 1 3]).*B(:,[2 1 3]);
But why?
Omar Mian
Omar Mian el 30 de Dic. de 2011

0 votos

Thanks for the suggestions. I should have been more explicit in my question. I want to do the arithmetic before rearranging because in actual use, the equation will involve more variables than used in the example. I tried the following:
C = (A.*B)(:,[2 1 3])
C = [A.*B](:,[2 1 3])
Neither of these work, but I don't understand why that syntax is inappropriate.
"But why?"
Largely curiosity. I want to know if I can avoid the intermediate step.
the cyclist
the cyclist el 30 de Dic. de 2011

0 votos

You cannot index results in that way. See, for example, the accepted answer in this thread about features that are "missing" in MATLAB:
Fangjun Jiang
Fangjun Jiang el 30 de Dic. de 2011

0 votos

If you have to do this, you can use subsref()
a=magic(3)
b=subsref(a,substruct('()', {':',[2,1,3]}))
In your case, it will be
C = subsref(A.*B, substruct('()', {':',[2,1,3]}))
Andrei Bobrov
Andrei Bobrov el 30 de Dic. de 2011

0 votos

circshift(fliplr(A.*B),[0 -1])

1 comentario

Fangjun Jiang
Fangjun Jiang el 31 de Dic. de 2011
What a surprise answer, andrei! But I would still go with the subsref() function. After all, it is the function format of the re-arrangement. To challenge you, what if A.*B is a 4x4 or 5x5 matrix but I want to swap the first and second column?

Iniciar sesión para comentar.

Categorías

Productos

Preguntada:

el 30 de Dic. de 2011

Community Treasure Hunt

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

Start Hunting!

Translated by