Speed up Matrix multiplication

6 visualizaciones (últimos 30 días)
Dustin Williams
Dustin Williams el 20 de Abr. de 2020
Comentada: Dustin Williams el 20 de Abr. de 2020
I want to do the following Matrix Multiplication. Problem - Example:
A = rand(3,3,1000000);
B = rand(3,1000000)
How to calculate C faster than with this For-loop? I tried parfor but its only slightly faster.
Furthermore i'd prefer not to install the Parallel Computing Toolbox or MTIMESX. Is it possible just with reshape/permute/bsxfun?
C = zeros(3,1,size(B,2));
for idx=1:size(B,2)
C(:,:,idx) = A(:,:,idx) * B(:,idx);
end
Thanks!
  1 comentario
Michael Soskind
Michael Soskind el 20 de Abr. de 2020
I see a marginal performance improvement by simply getting rid of the middle array index:
A = rand(3,3,1e6);
B = rand(3,1e6);
% original code
tic
C = zeros(3,1,size(B,2));
for idx=1:size(B,2)
C(:,:,idx) = A(:,:,idx) * B(:,idx);
end
toc
% modified code with one fewer array dimension
tic
C = zeros(3,size(B,2));
for idx=1:size(B,2)
C(:,idx) = A(:,:,idx) * B(:,idx);
end
toc
Not sure if that helps or hurts you, but I get about 0.3 sec faster execution time, on average (Goes from 2 sec to 1.7 sec).
Michael

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 20 de Abr. de 2020
Editada: Matt J el 20 de Abr. de 2020
C=sum( A.*reshape(B,1,3,[]),2);
  2 comentarios
Matt J
Matt J el 20 de Abr. de 2020
Or, on pre-R2016b versions,
C=sum( bsxfun( @times, A, reshape(B,1,3,[]) ) ,2)
Dustin Williams
Dustin Williams el 20 de Abr. de 2020
Thanks!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

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

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by