2013-08-30 7 views
-5

J'ai un vecteur de points dans un espace 3D.distance points 3D

A = rand(80,3) 

Je veux un vecteur contenant toutes les distances entre les points.

D = pdist(A,'euclidean') retourne un vecteur 1-by-3160 pourriez-vous s'il vous plaît dites-moi si c'est la bonne fonction à utiliser? merci

+0

Avez-vous essayé? –

+0

Une seule façon de le savoir: Essayez-le. –

+0

oui, mais je ne sais pas si c'est correct ... – gabboshow

Répondre

2

Si vous n'avez pas la boîte à outils de statistiques, ce n'est pas la bonne fonction à utiliser. Si vous le faites, alors c'est l'une des nombreuses fonctions que vous pourriez utiliser. Vous pouvez aussi faire quelque chose comme:

sz = size(A); 
A1 = reshape(A, [1 sz]); 
A2 = permute(A1, [2 1 3]); 
D = sqrt(sum(bsxfun(@minus, A1, A2).^2,3)); 

Ce calcule la distance entre deux points quelconques explicitement (donc, fait deux fois plus de travail, et prend deux fois plus d'espace: au lieu de 3180 6400 éléments). Cependant, il est plus facile de rechercher la distance entre deux points.

Vous pouvez ensuite comparer le résultat de ce calcul avec celui que vous obtenez de pdist, et vous convaincre si c'est la même chose. Soyez prudent - pdist renvoie un vecteur par défaut, vous devez donc consulter la documentation pour vous assurer que vous comprenez comment l'interpréter. La fonction squareform peut vous aider:

difference = sum(abs(squareform(D)) - pdist(A, 'euclidean')); 

Cela dépend de ce que vous voulez ... et ce que votre définition de « la bonne fonction » est ...

+0

merci beaucoup! c'était la réponse que je cherchais! – gabboshow

+0

Si c'est la réponse que vous cherchiez alors s'il vous plaît marquer comme "accepté". – Floris