Speed optimization of partial inner product (norm)
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
For a row vector, the norm can be written as
sqrt(sum(P.^2))
or
sqrt(P*P')
The latter is about twice as fast. Now I have a 4D matrix with dimensions [100,100,100,70], and would like to take the norm of the last dimension to yield a matrix of dimension [100,100,100]. This works:
sqrt(sum(P.^2,4))
but is too slow. Does anyone know a way to speed this up (perhaps in a similar way as the 1D case?)
0 Commenti
Risposta accettata
Matt J
il 28 Feb 2014
5 Commenti
Matt J
il 28 Feb 2014
Modificato: Matt J
il 28 Feb 2014
Jan, if you're going to take that modification on, I would just request that the summations/accumulations in the norm calculation still be done in double precision, regardless of the class of the input/output (or that there be an option to do so).
I also vote that the output class should match the input class.
Più risposte (1)
Ernst Jan
il 28 Feb 2014
My results show that the first is actually faster:
n = 10000;
P1 = rand(1,n);
tic
A1 = sqrt(sum(P1.^2));
toc
tic
A2 = sqrt(P1*P1');
toc
tic
A3 = sqrt(sum(P1.*P1));
toc
P2 = rand([100,100,100,70]);
tic
A4 = sqrt(sum(P2.*P2,4));
toc
tic
A5 = sqrt(sum(P2.^2,4));
toc
Elapsed time is 0.000044 seconds.
Elapsed time is 0.000141 seconds.
Elapsed time is 0.000031 seconds.
Elapsed time is 0.307783 seconds.
Elapsed time is 0.309741 seconds.
Please provide a code example?
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!