How to speed up normalization of an array

4 次查看(过去 30 天)
I have an array say selfn of size 1000X3. I need to normalize it and here is the code I am using:
selfn = selfn ./ repmat( sqrt( sum( selfn.^2, 2 ) ), 1, 3 );
Now this is a bottleneck in my code. Itried using bsxfun as:
mynews=ones(size (selfn)); selfn=bsxfun(@rdivide,selfn,bsxfun(@times,mynews,bsxfun(@power,sum(bsxfun(@power,selfn,2),2),0.5)));
But this doesn't make much change to the time it takes. I was wondering if I can use hypot to speed up this part. Any thoughts or suggestions on further speed improvement? I would really appreciate it if anyone can help.

回答(1 个)

W. Owen Brimijoin
You don't have to use bsxfun three times in that line, just the once. Try this simpler line:
selfn = bsxfun(@rdivide,selfn,sqrt(sum(selfn.^2,2)));
That is ever so slightly faster than your repmat solution (on my machine the elapsed time is 0.001946 versus 0.002416 seconds), but I fear you aren't going to get a whole lot quicker than that. Anyone else know how to beat that time?
  1 个评论
Arti Siddhpura
Arti Siddhpura 2014-7-2
Thanks W. Owen Brimijoin. And yeah you are right, it doesn't change elapsed time much.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by