2016-11-29 63 views
0

我想創建一個自己定製的k最近鄰居方法。爲此,我需要一個矩陣(x:y),它返回給定函數(例如基於我的數據集的7個項目的歐幾里得)的x和y的每個組合的距離。歐幾里得距離的python數據幀矩陣

例如

data: 
    x1 x2 x3 
    row 1: 1 2 3 
    row 2: 1 1 1 
    row 3: 4 2 3 

如果我選擇X1和X2和歐幾里得,那麼輸出應該是一個3x3輸出

1:1=0 
1:2 =sqrt((1-1)^2+(2-1)^2)=1 
1:3 =sqrt((1-4)^2+(2-2)^2)=sqrt(3) 
2:1=1:2=1 
2:2=0 
2:3=sqrt((1-4)^2+(1-2)^2)=2 
3:3=0 

等等...

怎麼寫,沒有通過數據幀進行迭代?

在此先感謝您的支持。

+0

它看起來像您的一些例子的計算是錯誤的,即'1:3'應該是'SQRT(9)= 3',和'2 :3'應該是'sqrt(10)'。 – root

回答

2

您可以使用scipy.spatial.distance.pdistscipy.spatial.distance.squareform

from scipy.spatial.distance import pdist, squareform 

dist = pdist(df[['x1', 'x2']], 'euclidean') 
df_dist = pd.DataFrame(squareform(dist)) 

如果你只是想一個數組作爲輸出,而不是一個數據幀,只使用squareform本身,而無需在數據幀加以包裝。

所產生的輸出(作爲數據幀):

 0   1   2 
0 0.0 1.000000 3.000000 
1 1.0 0.000000 3.162278 
2 3.0 3.162278 0.000000 
+0

非常好!非常感謝! –

相關問題