Numpy wo () auf einer 2D Matrix

Ich habe eine Matrix wie diese

t = np.array([[1,2,3,'foo'], [2,3,4,'bar'], [5,6,7,'hello'], [8,9,1,'bar']]) 

Ich möchte die Indizes erhalten, wo die Zeilen den String 'bar' enthalten

  • Was ist das Äquivalent von "zip ()" in Python's numpy?
  • Objekt aus einer Liste von Objekten in Python entfernen
  • Warum sind Pythons Arrays langsam?
  • Effiziente Möglichkeit, den größten Schlüssel in einem Wörterbuch mit Nicht-Null-Wert zu finden
  • Multithread vs List Verständnis in Simulation
  • Anhängen zur Liste im Python-Wörterbuch
  • In einem 1d Array

     rows = np.where(t == 'bar') 

    Sollte mir die indizes geben [0,3] gefolgt von Rundfunk: –

     results = t[rows] 

    Sollte mir die richtigen reihen geben

    Aber ich kann nicht herausfinden, wie man es mit 2d Arrays zu arbeiten.

    2 Solutions collect form web for “Numpy wo () auf einer 2D Matrix”

    Für den allgemeinen Fall, wo Ihr Suchstring in jeder Spalte sein kann, können Sie dies tun:

     >>> rows, cols = np.where(t == 'bar') >>> t[rows] array([['2', '3', '4', 'bar'], ['8', '9', '1', 'bar']], dtype='|S11') 

    Sie müssen das Array auf die Spalte schneiden, die Sie indizieren möchten:

     rows = np.where(t[:,3] == 'bar') result = t1[rows] 

    Dies ergibt:

      [[2,3,4,'bar'], [8,9,1,'bar']] 
    Python ist die beste Programmiersprache der Welt.