Abrufen des Zeilenindex für ein 2D-numPy-Array, wenn mehrere Spaltenwerte bekannt sind

8

Angenommen, ich habe ein 2D-numPy-Array wie:

  

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Wie finde ich den Index der Zeile, für die ich mehrere Werte kenne? Wenn zum Beispiel bekannt ist, dass die 0. Spalte 2 ist und die 1. Spalte 5 ist, würde ich gerne den Zeilenindex wissen, wo diese Bedingung erfüllt ist (in diesem Fall Zeile 1).

In meiner Anwendung sind die ersten beiden Spalten (x, y) -Koordinaten und die dritte Spalte enthält Informationen zu dieser Koordinate. Ich versuche, bestimmte Koordinaten in einer Liste zu finden, damit ich den Wert in der dritten Spalte ändern kann.

BEARBEITEN: Zur Verdeutlichung, hier ist ein nicht-quadratisches Beispiel:

  

a = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]

Angenommen, ich weiß, dass die Zeile, nach der ich suche, 13 in der 0. Spalte und 14 in der 1. Spalte hat. Ich möchte den Index dieser Zeile zurückgeben. In diesem Fall möchte ich den Index 2 (2. Zeile) zurückgeben.

Oder noch besser, ich möchte die vierte Spalte der Zeile bearbeiten, die 13 in der 0-ten Spalte und 14 in der 1. Spalte hat. Hier ist eine Lösung, die ich zu dem Fall gefunden habe, den ich beschrieben habe (Ändern des Wertes auf 999):

  

a [(a [: 0 ] == 13) & amp; (a [: 1 ] == 14),   3] = 999

gibt:

  

a = [[1, 2, 3, 4, 5, 6], [7, 8, 9,   10, 11, 12], [13, 14, 15, 999, 17, 18]]

Es tut mir leid, wenn das unklar war. Könnte jemand in meinem ursprünglichen Post (über dem Edit) darauf hinweisen, wie das anders interpretiert werden könnte, weil ich Schwierigkeiten habe, es zu sehen.

Danke.

EDIT 2: Fehler beim ersten Editieren behoben (fett dargestellt)

Ich kann jetzt sehen, wie ich das Ganze für alle verwirrend gemacht habe. Die Lösung für mein Problem ist in der Bedingung b) der Eat-Lösung gut beschrieben. Danke.

    
lookitsmarc 06.02.2011, 00:54
quelle

3 Antworten

4

Hier finden Sie Möglichkeiten, die Bedingungen in Spalten oder Zeilen zu behandeln, inspiriert vom Zen von Python.

%Vor%

Also nach dem zweiten Hinweis:
a) Bedingungen für Spalte (n), angewendet auf Zeile (n):

%Vor%

b) Bedingungen für Zeile (n), die auf Spalte (n) angewendet werden:

%Vor%

Ich hoffe also, dass es wirklich Sinn macht, beim Zugriff auf Spalten und Zeilen immer explizit zu sein. Code wird normalerweise von Personen mit unterschiedlichen Hintergründen gelesen.

    
eat 06.02.2011, 11:10
quelle
9
%Vor%

a==2 gibt ein boolesches numpy-Array zurück, das anzeigt, wo die Bedingung True ist:

%Vor%

Sie können alle Spalten mit True finden, indem Sie np.any(...,axis=0) :

verwenden %Vor%

Sie können herausfinden, wo beide Bedingungen gleichzeitig wahr sind, indem Sie & verwenden:

%Vor%

Schließlich können Sie mit np.where :

den Index der Spalten finden, in denen die Bedingungen gleichzeitig wahr sind %Vor%     
unutbu 06.02.2011 01:09
quelle
2

Machen

%Vor%

wie unutbu vorgeschlagen, wird die Information nicht verwenden, dass 2 in der 0. Spalte steht und 5 in der 1. Spalte ist. Für a = np.array([[5, 2, 3], [2, 5, 6], [7, 8, 9]]) wird fälschlicherweise (array([0, 1]),)

zurückgegeben

Stattdessen können Sie

verwenden %Vor%

um das korrekte Ergebnis zu erhalten (array([1]),) .

Wenn Sie außerdem die zweite Spalte dieser bestimmten Zeile bearbeiten möchten, können Sie np.where überspringen und einfach mit: a[2][(a[0]==2) & (a[1]==5)] darauf verweisen. Dies funktioniert auch für Zuweisungen, zum Beispiel a[2][(a[0]==2) & (a[1]==5)] = 11 .

    
tsvikas 06.02.2011 11:29
quelle

Tags und Links