2017-05-11 111 views
0

我有我使用完成最近鄰計算一個numpy的數組:如何返回numpy數組的索引?

def all_distance_compute(matrix, vector): 
    diff = matrix[0:] - matrix[vector] 
    distances = np.sqrt(np.sum(diff**2, axis=1)) 

    for i in range(len(distances)):   
     print i 
     print distances[i] 
return distances 

似乎根據返回的結果距離然而,要工作,我不知道該怎麼看距離中的所有值以及返回數組中哪個元素是最小值。

我在函數中使用的for循環純粹是爲了診斷,但我想我可以通過這種方式進行迭代,也許可以通過這種方式來確定最小值,但是我也認爲numpy可能有更好的方法來執行此操作。 編輯: 所以當我打字出了問題,我想我會盡我的迭代的建議,找出最小的,我改變了我的功能是這樣的: code

for i in range(len(distances)): 
     if distances[i] < min and distances[i] > 0: 
      min = distances[i] 
      mindex = i 

return min, mindex 
+0

什麼是'VECTOR'?你可以添加一個有代表性的案例嗎? – Divakar

+0

查看上面的更新。 –

回答

1

numpy.argsort將返回你的數組索引按升序排序。

例如:

In [1]: import numpy as np 

In [2]: arr = np.array([5,3,8,2,1,9]) 

In [3]: np.argsort(arr) 
Out [3]: array([4, 3, 1, 0, 2, 5]) 

In [4]: arr[np.argsort(arr)] 
Out [4]: array([1, 2, 3, 5, 8, 9]) 
+0

謝謝!這也適用。如果我做np.argsort(距離),我會得到與上面的mindex變量相同的結果。 –

+1

確實。儘管如此,numpy解決方案的速度至少要快一個數量級。 – Grr