2016-10-17 3 views
0

Ich habe eine numpy Matrix, in der ich eine Art von Schlüssel in das erste Element jeder Zeile speichern (oder auf andere Weise alle Schlüssel in der ersten Spalte sind).Finden Sie die Zeilennummer mit dem ersten Element der Zeile

[[123,0,1,1,2], 
[12,1,2,3,4], 
[1,0,2,5,4], 
[90,1,1,4,3]] 

Ich möchte die Zeilennummer durch den Schlüssel suchen bekommen. Ich fand, dass wir numpy.where dafür verwenden können, aber nicht klar, wie man es verwendet, um die Zeilennummer zu erhalten. Ich möchte etwas wie

>>numpy.func(myMatrix,90) 
3 

Jede Hilfe wäre willkommen.

+1

Wenn Sie einen Schlüssel und einige Daten haben, sollten Sie wirklich ein Wörterbuch, keine Liste verwenden. Das Finden von Elementen in einem Diktat nach Schlüssel ist schnell, das Durchsuchen einer Liste ist langsam. –

+0

_Row_ Nummer (Substantiv, bezieht sich auf die Position der Zeile, die _'line'_ Ihrer Matrix) und _raw_ (Adjektiv, bedeutet _wild, brute_ oder _united, unprocessed_) Anzahl sind unterschiedlich. Letzteres ist vielleicht nicht einmal ein gültiger Begriff. Ich nehme an, du redest hier über _row_ number. – ForceBru

+2

Warum nicht einen Pandas DataFrame verwenden? Ihre Schlüsselsäule wäre der Index und es gibt viele Möglichkeiten, um Ihre Daten auszuwählen, zu gruppieren und zu unterteilen. – pbreach

Antwort

0

Vergleichen Sie die erste Spalte mit 90 innerhalb np.where. Es wird ein Array mit den Indizes der Elemente zurück, die mit 90 gleich sind:

In [3]: A = np.array([[123,0,1,1,2], 
[12,1,2,3,4], 
[1,0,2,5,4], 
[90,1,1,4,3]]) 


In [6]: np.where(A[:,0]==90)[0] 
Out[6]: array([3]) 
1

Nach dem online doc, numpy.where wenn Sie geben es nur ein boolean-Array-Listen von Koordinaten zurück (eine Liste pro Dimension) für die Elemente, die True sind. So können wir die gewünschten Informationen erhalten, indem Sie die erste Spalte Ihres Arrays abfangen, sie mit dem gewünschten Element vergleichen und np.where in diesem booleschen Array aufrufen. All das würde so aussehen:

row,column=np.where(myMatrix[;,0]==90) 
#Note that column will just be 0 here 
Verwandte Themen