2016-10-14 1 views
0

Disons que j'ai un ensemble de données comme ci-dessous.Matlab - Trouver des points dans le voisinage

X = [170,85; 165,75; 180 100; 190 120; 160,80; 170,70];

un vecteur de distance

Y = [10,20];

un point de données

Z = [166,77];

Je veux trouver tous les points de X qui relèvent de la distance Y du point Z

La réponse devrait être ans = [170,85; 165,75; 160,80; 170,70]

Comment puis-je faire dans Matlab

Répondre

1
a= X(abs(X(:,1)-Z(1))<=Y(1) & abs(X(:,2)-Z(2))<=Y(2),:) 

EDIT

solution Multidimensional peut ressembler à ceci:

a= X(all(abs(X-ones(size(X,1),1)*Z) <= ones(size(X,1),1)*Y,2),:) 
+0

Ok. Donc, cela fonctionne bien pour l'exemple ci-dessus mais j'ai donné un exemple juste pour clarifier ce que je veux faire. Pour ma tâche actuelle, j'ai un jeu de données avec beaucoup plus de dimensions. Donc, la méthode ci-dessus nécessitera trop d'efforts. Je cherchais quelque chose comme 'rangesearch' Merci quand même :) – moCap

+0

@moCap J'ai mis à jour la réponse – AVK