choose data points that nears each other and store in different matrix

3 vues (au cours des 30 derniers jours)
Laura
Laura le 17 Juil 2013
I have a matrix A that has dimension n x 2.
A(:,1) is x-values and A(:,2) is y values.
Choose the the pairs that is near each others within certain distance and store in matrix B that has x value in column 1 and y value in column 2.
Example
A= [1 1 ; 2 2 ; 5 5 ; so on]
let say if the distance we want to set is 2
then dist =sqrt((2-1)^2 +(2-1)^2) = sqrt(2) which is less than 2. So first and second pair are close.
store it in B
B= [1 1 ; 2 2; so on ]
Nothe this is example for 3 pairs and I have n- pair.
Please help me with a loop to do n-pair
Thank you

Réponse acceptée

Matt Kindig
Matt Kindig le 17 Juil 2013
Modifié(e) : Matt Kindig le 17 Juil 2013
One (non-loop) way:
[x1,x2]=meshgrid(A(:,1));
[y1,y2]=meshgrid(A(:,2));
D = sqrt((x1-x2).^2+(y1-y2).^2); %distance matrix
setDistance = 2;
[r,c]=find(D <= setDistance); %find which pairs are below setDistance.
B = [r,c]; %set of pairs
B(r==c,:)= []; %eliminate points paired with itself.
  5 commentaires
Laura
Laura le 18 Juil 2013
I want to calculate the distance between point i to point j that in the distance of 2. Then store that pairs in the matrix B.
as I made example above
A= [1 1 ; 2 2 ; 5 5 ; so on]
let say if the distance we want to set is 2
then dist =sqrt((2-1)^2 +(2-1)^2) = sqrt(2) which is less than 2. So first and second pair are close.
store it in B
B= [1 1 ; 2 2; so on ]
You see that the first pair of coordinate (1 1) and second pair (2 2) are in the distance of 2 so B has to contain (1,1) and (2,2). Then calculate the pair 1 to pair 3 which is obvious that pair 3 is not in the range. Then check pair 1 to n-pair. Then calculate pair 2 to any pair and do to it to n-pair, so on .
Matt Kindig
Matt Kindig le 18 Juil 2013
Modifié(e) : Matt Kindig le 18 Juil 2013
Right, but this means that B doesn't indicate any information as to which points are members of which pairs. As it stands now, your B just contains points which are members of a pair which is within 2 units of another point; however, the pair correspondence is not present.
If this is what you wish to do, you can add this line of code to the end:
B = A(unique(B(:)),:);
to get that result.
However, you lose the pair information. Really it depends on what you intend to do with the points in B once you've found them.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by