Combination of rows of two different matrices

1 visualización (últimos 30 días)
J AI
J AI el 23 de Jul. de 2020
Comentada: Fangjun Jiang el 24 de Jul. de 2020
Sorry if this is a repeated question but I failed to find an answer myself. I have two matrices:
A = [-0.6, -0.2;
-60, 2;
6, -20];
B = [-0.4, -0.8;
-40, 8;
4, -80];
I want to find all the possible combinations of sum of each row (sum of individual elements of a row) of A with each row of B, i.e., my desired result is (order does not matter):
ans = [-1, -1;
-40.6, 7.8;
3.4, -80.2;
-60.4, 1.2;
-100, 10;
-56, -78;
5.6, -20.8;
-34, -12;
10, -100];
which is a matrix resulting from possible combinations of A and B.
Thanks in advance.
(Please no for loops. It is pretty trivial then.)
EDIT: I have used 2 columns and 3 rows as an example. Looking for more general solution, i.e., for n number of columns and m number of rows.

Respuesta aceptada

Fangjun Jiang
Fangjun Jiang el 23 de Jul. de 2020
Editada: Fangjun Jiang el 23 de Jul. de 2020
Feels non-ideal. Any better solution?
>> C=A(:,1)+B(:,1)';
D=A(:,2)+B(:,2)';
reshape([C(:),D(:)],[],2)
ans =
-1.0000 -1.0000
-60.4000 1.2000
5.6000 -20.8000
-40.6000 7.8000
-100.0000 10.0000
-34.0000 -12.0000
3.4000 -80.2000
-56.0000 -78.0000
10.0000 -100.0000
better one
>> m=size(A,1);
ind1=repmat(1:m,1,m);
ind2=repelem(1:m,m);
A(ind1,:)+B(ind2,:)
ans =
-1.0000 -1.0000
-60.4000 1.2000
5.6000 -20.8000
-40.6000 7.8000
-100.0000 10.0000
-34.0000 -12.0000
3.4000 -80.2000
-56.0000 -78.0000
10.0000 -100.0000
  2 comentarios
J AI
J AI el 23 de Jul. de 2020
This works, but I should have been a bit more specific with my question - the number of columns I have used is 2, however, it may vary. So I was looking for a more general solution. Thanks anyway!
J AI
J AI el 23 de Jul. de 2020
Great work! Thanks a lot

Iniciar sesión para comentar.

Más respuestas (1)

Bruno Luong
Bruno Luong el 23 de Jul. de 2020
Editada: Bruno Luong el 23 de Jul. de 2020
A = [-0.6, -0.2;
-60, 2;
6, -20];
B = [-0.4, -0.8;
-40, 8;
4, -80];
Single statement
reshape(permute(A,[3 1 2])+permute(B,[1 3 2]),[],size(A,2))
or a variation
reshape(reshape(A,1,size(A,1),[])+reshape(B,size(B,1),1,[]),[],size(A,2))
Gives
ans =
-1.0000 -1.0000
-40.6000 7.8000
3.4000 -80.2000
-60.4000 1.2000
-100.0000 10.0000
-56.0000 -78.0000
5.6000 -20.8000
-34.0000 -12.0000
10.0000 -100.0000
>>
  3 comentarios
Bruno Luong
Bruno Luong el 23 de Jul. de 2020
Yes the variation version does no more no less than the required combination sums and puts at the results at the right place. Not a hair uneccesary arithmetic or memory moving (first version).
Fangjun Jiang
Fangjun Jiang el 24 de Jul. de 2020
Brilliant, Bruno Luong! I learned implicit expansion in a whole new dimension.

Iniciar sesión para comentar.

Categorías

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

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by