필터 지우기
필터 지우기

How to vectorize computing all pairwise vectors in a pointcloud?

조회 수: 1 (최근 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일

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by