2017-05-11 5 views
0

Ich habe eine numpy Array, das ich eine nächste Nachbar Berechnung abzuschließen bin mit:Wie kann ich den Index eines numpligen Arrays zurückgeben?

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 

Es scheint, basierend auf dem Ergebnis Entfernungen arbeiten zu werden, die jedoch zurückgeführt wird, ich weiß nicht, wie zu sehen alle Werte in Distanzen und geben zurück, welches Element in der Anordnung das Minimum ist. Die For-Schleife, die ich in meiner Funktion habe, dient nur zur Diagnose, aber ich dachte, ich könnte durch diesen Weg iterieren und vielleicht das Minimum auf diese Weise bestimmen, aber ich dachte auch, dass numpy wahrscheinlich ein besseres Mittel dazu hat. EDIT: So wie ich die Frage eingeben out war, dachte ich, ich würde mein Vorschlag von Iterieren versuchen, das Minimum zu finden, und ich änderte meine Funktion, dies zu sein: code

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

return min, mindex 
+0

Was ist 'VECTOR'? Könnten Sie einen repräsentativen Beispielfall hinzufügen? – Divakar

+0

Siehe Update oben. –

Antwort

1

numpy.argsort kehren Sie die Array-Index in aufsteigender Reihenfolge sortiert.

Zum Beispiel:

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

Danke! Das funktioniert auch. Wenn ich np.argsort (Distanzen) mache, bekomme ich das gleiche Ergebnis wie meine oben genannte Variable. –

+1

In der Tat. Die numpige Lösung wird jedoch mindestens eine Größenordnung schneller sein. – Grr

Verwandte Themen