2010-11-21 9 views
0

Ich habe ein numpy 2D-Array und ich möchte es Column c zurückgeben, wobei (r, c-1) (Zeile r, Column c) gleich einem bestimmten Wert (int n) ist.Wie extrahiert man Zeilen in einem Array, die einen bestimmten Wert enthalten? (numpy, scipy)

Ich will nicht die Zeilen iterieren so etwas wie

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

schreiben, weil es 4000 von ihnen sind und diese 2D-Array ist nur eine von 20 i Trog suchen.

Ich fand "Filter", weiß aber nicht, wie man es benutzt (kein Dokument gefunden).

Gibt es eine Funktion, die eine solche Suche bietet?

Antwort

3

Ich hoffe, ich habe Ihre Frage richtig verstanden. Angenommen, Sie a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

ein Array haben und Sie alle Linien extrahieren, wo der erste Eintrag 2 ist.

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0] bezeichnet die erste Spalte des Arrays, == 2 einen booleschen Array zurückgibt die Einträge Markierung, die übereinstimmen, und dann verwenden wir advanced indexing den jeweiligen Reihen zu extrahieren: Dies kann wie folgt geschehen.

Natürlich muss NumPy über alle Einträge iterieren, aber das wird viel schneller als in Python.

+0

Das macht fast das, was ich will. Ich möchte, dass die Zeilen zurückgegeben werden, für die in der ersten Spalte eine '2' steht. In Ihrem Beispiel soll nur Array zurückgegeben werden ([[2, 3, 4]]). – Sebastian

+0

OK, ich werde meine Antwort aktualisieren. –

+0

Ist das besser? –

0

Numpy-Arrays werden nicht indiziert. Wenn Sie diese spezifische Operation effizienter als linear in der Array-Größe ausführen müssen, müssen Sie etwas anderes als numpy verwenden.

+0

Ich weiß, ich muss jede Zeile betrachten, aber ich möchte es nicht mit Schleifen machen. Ich hoffe, es gibt eingebaute Funktionen, die Dinge schneller als Schleifen machen können. – Sebastian

Verwandte Themen