Fast 2D distance calculation
29 ビュー (過去 30 日間)
古いコメントを表示
Hi all,
Many of the codes I am currently using depend on a simple calculation: the distance between a single point and a set of other points.
In one example, using the matlab profiler I see that this single calculation takes 50% of the total function time, so I would like to optimise it as far as possible.
I have looked around and haven't found anything more optimal than:
p1 = rand(1,2); % single point
pn = rand(1000000,2); % random points
tic
d = sqrt(sum((p1-pn).^2,2)); % calculate the distance between these
toc
Does anyone else have a clever idea that would optimise this - even just by a tiny fraction? Is there any way to speed these calculations up on the GPU or using a mex? I would be really happy to see any suggestions.
I suspect this might be already be as mathematically simple as possible, but I'm frustrated because I need to calculate this a lot.
I have already vectrorised my code as far as possible.
Thanks for any help,
R.
5 件のコメント
回答 (2 件)
Matt J
2019 年 7 月 29 日
編集済み: Matt J
2019 年 7 月 29 日
If you have the Parallel Computing Toolbox, you can execute the computations on the GPU just by building p1 and pn as gpuArrays. That should definitely speed things up.
gd=gpuDevice;
p1 = gpuArray.rand(1,2);
pn = gpuArray.rand(1000000,2);
tic
d = sqrt(sum((p1-pn).^2,2));
wait(gd);
toc %Elapsed time is 0.001429 seconds.
2 件のコメント
Matt J
2019 年 7 月 29 日
Well, I don't think the question can be taken any further until we know what parallel computing resources you do have, or can remote connect to. I think you are at the limits of performance already with standard Matlab.
Joss Knight
2019 年 8 月 3 日
pdist2 is the usual way to do this, if you have Statistics and Machine Learning Toolbox.
2 件のコメント
Joss Knight
2019 年 8 月 3 日
But pdist2 does that. Input x is a 1-by-2 vector, and input y is an N-by-2 array of N points.
You may be right that it is no faster than implementing it manually.
参考
カテゴリ
Help Center および File Exchange で Matrices and Arrays についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!