Fast product of large matrices
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello,
I need to calculate a matrix product like the following a lot of times:
A=rand(2^18,500)
AT=transpose(A)
x=rand(2^18,1)
B=AT*spdiags(x)*A
This should give a 500x500 matrix B (above matrices are just a random example). I need to do this quite often for changing x but constant A and it would take too long if I do it as above, is there any way to do it faster? I think the expression comes from the sum
B(k,l)=sum(A(:,k).*A(:,l).*x)
written in matrix form.
Thanks for your help!
2 Commenti
KALYAN ACHARJYA
il 13 Dic 2020
Apart from your question, is the dimensionality OK for matrix multiplication?
Risposte (1)
Matt J
il 13 Dic 2020
Modificato: Matt J
il 13 Dic 2020
If see about a 25% speed-up when done as B=AT*(x.*A),
N=2^18;
A=rand(N,500);
AT=A.';
x=rand(N,1);
tic;
B=AT*spdiags(x,0,N,N)*A;
toc%Elapsed time is 1.594161 seconds.
tic;
B=AT*(x.*A);
toc%Elapsed time is 1.195049 seconds.
I don't think you can hope for better than 50% speed-up. In the very best case, when x=ones(N,1), the compute time you are stuck with is,
tic;
B=AT*A;
toc;%Elapsed time is 0.899292 seconds.
1 Commento
Matt J
il 14 Dic 2020
If you have the Parallel Computing Toolbox and a decent grpahics card, you could get some speed-up by doing this using gpuArrays.
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!