2012-06-21 79 views
1

我正在使用Ipython Notebook。我正在研究一個項目,在這個項目中我需要查看三維空間中的大約100個數據點,並計算出每個點與每個角度之間的距離。我希望看到數據點的相關性,並最終查看數據是否有任何結構(隱藏在某處的直線)。我研究了聚類技術和hough變換,但他們似乎沒有給我我需要的結果。任何想法都非常感謝..謝謝!使用Python查找3D中周圍數據點的距離和角度。查找直線

+1

只需對數據點進行線性迴歸即可。 「scipy」是一個很好的包裝。 – Blender

回答

1

對於確定三維點之間成對距離的第一個問題,可以使用scipy.spatial.distance.pdist()。這將爲n個點生成n(n-1)/ 2個距離。對於第二個問題找到點之間的角度,這是棘手的。這似乎非常棘手,我甚至不想去想它;但是,爲此,您可以使用scipy.spatial.distance.cosine(),它將確定兩個向量之間的餘弦距離。

你看過scikits嗎?我發現他們在我的工作中非常有幫助。 http://scikit-learn.org/stable/

+0

將向量對技術與此處包含的角度公式結合起來可能很有用:http://stackoverflow.com/a/1211243/401828 – heltonbiker

0

距離最好使用scipy.spatial.distance.pdist()正如cjohnson318的回答中所述。對於一個小陣列的點「A」定義爲:

import numpy as np 
a=np.array([[0,0,0],[1,1,1],[4,2,-2],[3,-1,2]]) 

的點之間的距離歐氏距離「d」可以發現:

from scipy.spatial.distance import pdist, squareform 
D = squareform(pdist(a)) 

在三維極座標形式,則需要2角度來定義從一個點到另一個點的方向。看起來像一個笛卡爾單位矢量給出的方向可能也有助於你的目的。這些可以被找到:

(a-a[:,np.newaxis,:])/D[...,np.newaxis] 

這將包括在對角線元素NaN,因爲沒有向量從點到它自己。如果有必要,可以使用np.nan_to_num

這些可以更改爲零如果您確實需要角度,則可以通過將np.arctan應用於單位矢量的分量來獲取它們。

相關問題