# Speed optimization of partial inner product (norm)

조회 수: 21(최근 30일)
lvn 2014년 2월 28일
댓글: lvn 2014년 4월 17일
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?)

댓글을 달려면 로그인하십시오.

### 채택된 답변

Matt J 2014년 2월 28일
##### 댓글 수: 5표시숨기기 이전 댓글 수: 4
lvn 2014년 4월 17일
Jan, I am sorry I didn't see your comment until now (after I tagged the question answered, I didn't open it anymore).
This norm is still a bottleneck in my program and I would therefore be very grateful if you could make a version with both in and output having single format.

댓글을 달려면 로그인하십시오.

### 추가 답변(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.
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Matt J 2014년 2월 28일
@Ernst
You're using way too small a value of n to see a meaningful comparison. Here's what I get with n=1e7
Elapsed time is 0.031045 seconds.
Elapsed time is 0.008693 seconds.
Elapsed time is 0.030998 seconds.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!