Column multiplication of two 2D matrices.

조회 수: 2 (최근 30일)
Nikan Fakhari
Nikan Fakhari 2021년 1월 13일
편집: Bruno Luong 2021년 1월 14일
Hi there,
I have two quite large matrices with the following sizes:
A = rand(94037,2240) B=rand(2240,2240)
I would like to mutiply each column of A by the transpose of each column of B (bascially two vector multiplication). Therefore each mutiplcation gives me a 2D matrix wih size (94037,2240) and I would like to store the result of each multiplication in a 3d MATRIX.
The thing is I can do this with for-loop as show below but its very slow and in the middle of operation matlab exist, because its quite heavy.
S = zeros(94037,2240,2240);
for i=1:1:2240
S(:,:,i) =A(:,i)*(B(:,i))';
end
Is there anyway I can do this without using for loop to speed up the process ?
Thanks for the help.
Best,
Nikan
  댓글 수: 2
Matt J
Matt J 2021년 1월 13일
Outer products are often both an inefficient and an avoidable step in many computations. What do you plan to do with S once you've computed it?
Nikan Fakhari
Nikan Fakhari 2021년 1월 13일
I am planning to take sum along the third dimension

댓글을 달려면 로그인하십시오.

답변 (2개)

Matt J
Matt J 2021년 1월 13일
편집: Matt J 2021년 1월 13일
I am planning to take sum along the third dimension
That would simply give you A*B.'

Matt J
Matt J 2021년 1월 13일
편집: Matt J 2021년 1월 14일
I doubt you will be able to do the computation with the matrix sizes you've indicated. The result will consume 3.5 TB of RAM in double floating point. However, if you can scale down the matrix sizes, then a loop-free solution is as follows,
[ma,na]=size(A);
[mb,nb]=size(B);
S=reshape(A,ma,1,na).*reshape(B,1,mb,nb);
  댓글 수: 2
Bruno Luong
Bruno Luong 2021년 1월 14일
편집: Bruno Luong 2021년 1월 14일
I guess there is a typo. The right command has no brakets
S = reshape(A,ma,1,na) .* reshape(B,1,mb,nb);
Matt J
Matt J 2021년 1월 14일
Right!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by