Speed optimization of partial inner product (norm)
조회 수: 3 (최근 30일)
이전 댓글 표시
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
채택된 답변
Matt J
2014년 2월 28일
댓글 수: 5
Matt J
2014년 2월 28일
편집: Matt J
2014년 2월 28일
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.
추가 답변 (1개)
Ernst Jan
2014년 2월 28일
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?
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!