# What is the fastest way to do repeated element wise matrix multiplication?

8 views (last 30 days)
Aravind Varma Dantuluri on 19 Feb 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?

Stephen23 on 19 Feb 2024
Moved: Stephen23 on 19 Feb 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).
Stephen23 on 19 Feb 2024
Edited: Stephen23 on 19 Feb 2024
@Aravind Varma Dantuluri: did that make enough difference to the speed?
Another possibilty would be to look at some kind of parallel processing:
Aravind Varma Dantuluri on 19 Feb 2024
@Stephen23, using MTIMES definitely helped. Now I am checking out pagemtimes and then will check parallel computing capabilities. Thanks for your help!

### Categories

Find more on Linear Algebra in Help Center and File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!