How to vectorize computing all pairwise vectors in a pointcloud?

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 日

0 投票

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 日

0 投票

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

カテゴリ

ヘルプ センター および File ExchangeSpecialized Messages についてさらに検索

製品

質問済み:

2017 年 3 月 23 日

回答済み:

2017 年 3 月 23 日

Community Treasure Hunt

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

Start Hunting!

Translated by