2016-07-27 92 views
-2

我有一個矩陣查找k近鄰

a = np.array([[ 8.6569141 , 8.19847655, 7.83540289, 8.49673563], 
       [ 7.86962825, 9.16869072, 8.60084933, 8.91840291], 
       [ 9.61896688, 9.69620637, 9.1879124 , 9.87479709], 
       [ 9.17427532, 8.98877464, 8.4313078 , 7.81914999]]) 

我看到這個代碼,以獲得K近鄰指數:

k = 1 
index = a.argsort()[:, :k] 

輸出:

array([[2], 
     [0], 
     [2], 
     [3]]) 

有人能提供這些產出指數的解釋是什麼?

回答

0

與NumPy的argsort返回將數組排序索引:

In [864]: a.argsort() 
Out[864]: 
array([[2, 1, 3, 0], 
     [0, 2, 3, 1], 
     [2, 0, 1, 3], 
     [3, 2, 1, 0]], dtype=int64) 

這個輸出是告訴你的a第一行的元素的升序排序的指數2130。第二行元素的索引是0,2,31等等。

前提是你定義k = 1a.argsort()[:, :k]只是以上所述陣列的第一列:

In [865]: a.argsort()[:, :k] 
Out[865]: 
array([[2], 
     [0], 
     [2], 
     [3]], dtype=int64) 

因此您的代碼返回一個4 × 1陣列,使得第j 元件包含索引(即,柱)其中位於數組行的最小值a,或者換句話說,訓練樣本的最近鄰居的索引。

+0

匿名downvoter再次觸發 – Tonechas

+0

如果您只需要k個鄰居,並且k << n,那麼'argpartition'優於'argsort'。 – Itay