2016-07-27 68 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