What is the fastest way to do repeated element wise matrix multiplication?
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Aravind Varma Dantuluri
el 19 de Feb. de 2024
Comentada: Aravind Varma Dantuluri
el 19 de Feb. de 2024
Given a matrix `A`, I need to multiply with another constant vector `B`, N times (N > 1 million). The size of `A` is `9000x1` and `B` is `9000x1000`.
The code is currently evaluated in the following way (random values taken for example):
B = rand(9000,1000); % B is fixed, does not depend on i
N = 1000000;
for i=1:N
rand('seed',i);
A = rand(9000,1); % A is 9000x1 matrix which varies with i
% prod = A.*B; % prod is 9000 x 1000 matrix
% sum_temp = sum(product); % sum_temp is 1 x 1000 matrix
% Edit
sum_temp = A.' * B;
% do multiple pperations with sum_temp
% result(i) = some_constant;
end
I used Profiler to see which line is taking the most time and it is the 2nd line (prod = A.*R;). The problem is that N is very large and the code is taking over several days to complete.
I am about to try the parallel computing toolbox (GPU computing), but are there any suggestions on what I can do in the basic version?
How can I reduce the run-time of such codes in MATLAB?
0 comentarios
Respuesta aceptada
Stephen23
el 19 de Feb. de 2024
Movida: Stephen23
el 19 de Feb. de 2024
Reduce the number of operations inside the loop by replacing TIMES and SUM with MTIMES (of course adjusting the matrix/vector orientations to suit).
5 comentarios
Stephen23
el 19 de Feb. de 2024
Editada: Stephen23
el 19 de Feb. de 2024
@Aravind Varma Dantuluri: did that make enough difference to the speed?
Another possibilty would be to look at some kind of parallel processing:
Más respuestas (0)
Ver también
Categorías
Más información sobre Linear Algebra en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!