B.Gen.Jack.O.Neill
B.Gen.Jack.O.Neill

Reputation: 8397

Multiply each column in a matrix by corresponding row in another and sum results in Matlab

Lets say I have matrices A = [1 2; 3 4], B = [4 3; 2 1]. I want to multiply each column from matrix A ([1; 3], [2; 4]) by the corresponding row in matrix B ([4 3], [2 1]) and sum resulting matrices. I have came up with the following code:

C = zeros(size(A));
for i = 1 : size(A, 1)
  C = C + A(:, i) * B(i, :);
end

Could it be rewritten using some math trick or matlab function to get rid of the for loop?

I see there is unclarity in my question regarding the result I want. The result should exactly mimic provided Matlab code, therefore I seek one matrix which is given by the matrix summation of the intermediate matrices that are created by multiplying each column vector with corresponding row vector from both matrices. For this specific example, it would be given by

C = A(:, 1) * B(1, :) + A(:, 2) * B(2, :);

I am just looking for some generic, for-loop less version for any matrices of compatible dimensions.

Upvotes: 1

Views: 1341

Answers (3)

informaton
informaton

Reputation: 1482

You can also do this in MATLAB, to get the sum.

C=ones(1,2)*A*B*ones(2,1)

The general form would be

C=ones(1,size(A,1))*(A*B)*ones(size(B,2),1);

EDIT

I see you updated your question for clarity. The matrix product can be calculated directly

C = A*B;  

as pointed out by jodag.

This works provided you follow rules of linear algebra where inner dimensions of your matrices are the same (i.e. when number of columns in A match the number of rows in B; size(A,2)==size(B,1)).

Upvotes: 0

Jonathan
Jonathan

Reputation: 6537

I just tried out my suggestion in the comments, and it seems to work with this octave tester:

Short form (only works in Octave):

A = [1 2; 3 4], B = [4 3; 2 1]
X = sum((A * B)(:))

Long form (Matlab):

A = [1 2; 3 4]
B = [4 3; 2 1]
C = A * B      % Stop here if you want the exact result from your Matlab code
x = sum(C(:))  % To get the sum of the resulting matrix

Sources:

  1. https://www.tutorialspoint.com/matlab/matlab_matrix_multiplication.htm
  2. https://www.mathworks.com/matlabcentral/newsreader/view_thread/51252

Update, based on your update:

Output of A * B:

 8    5
20   13

Output of your code:

 8    5
20   13

Upvotes: 2

jodag
jodag

Reputation: 22304

It appears that

C = zeros(size(A));
for i = 1 : size(A, 1)
  C = C + A(:, i) * B(i, :);
end

is equivalent to the matrix multiplication

C = A*B

for square matrices A and B.

Upvotes: 0

Related Questions