Speed optimization of partial inner product (norm)
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuesta aceptada
Matt J
el 28 de Feb. de 2014
5 comentarios
Matt J
el 28 de Feb. de 2014
Editada: Matt J
el 28 de Feb. de 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.
Más respuestas (1)
Ernst Jan
el 28 de Feb. de 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?
Ver también
Categorías
Más información sobre Logical 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!