How to vectorize computing all pairwise vectors in a pointcloud?

6 ビュー (過去 30 日間)
Burke Rosen
Burke Rosen 2017 年 3 月 23 日
回答済み: Walter Roberson 2017 年 3 月 23 日
I have an m points x n dimensions array xy of Cartesian coordinates. In my case, n is 2, but this should generalize to at least three dimensions. My goal is get the all the vectors created by combinatorial pairs of points. I can do this with nested for loops (see below), how can I vectorize this operation? I can get the vector magnitudes with pdist2(xy,xy), but not the vector angles.
[m,n] = size(xy);
V = zeros(m,m,n);
for im1 = 1:m
for im2 = 1:m
V(im1,im2,:) = xy(im1,:) - xy(im2,:);
end
end

回答 (3 件)

Burke Rosen
Burke Rosen 2017 年 3 月 23 日
After further review, I reduced it down to:
[m,n] = size(xy);
V = zeros(m,m,n);
for im = 1:m
V(:,im,:) = xy - xy(im,:); %2016b bsxfun syntax
end
Can it be vectorized any further?

Lowey
Lowey 2017 年 3 月 23 日
If I understand your question correctly, the meshgrid function may be of help.
im1 = 1:m;
im2 = 1:m;
[X, Y] = meshgrid(im1, im2);
The elements in X and their corresponding elements in Y give all possible combinations

Walter Roberson
Walter Roberson 2017 年 3 月 23 日
V = pdist(xy);

カテゴリ

Help Center および File ExchangeSpecialized Messages についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by