web-dev-qa-db-de.com

Elemente des numpy-Arrays über ein boolesches Maskenarray auswählen

Ich denke, die Antwort ist nahe, aber ich kann sie nicht sehen :-(

Ich habe ein boolesches Maskenarray der Länge n:

a = np.array([True, True, True, False, False])

Ich habe ein 2D-Array mit n Spalten:

b = np.array([[1,2,3,4,5], [1,2,3,4,5]])

Ich möchte ein neues Array, das nur die "True" -Werte enthält, zB:

c = ([[1,2,3], [1,2,3]])

c = a * b funktioniert nicht, da er auch "0" für die falschen Spalten enthält, die ich nicht möchte

c = np.delete(b, a, 1) does not work

Anregungen? Danke!

29
JohnDoe

Sie wollen wahrscheinlich so etwas wie:

>>> a = np.array([True, True, True, False, False])
>>> b = np.array([[1,2,3,4,5], [1,2,3,4,5]])
>>> b[:,a]
array([[1, 2, 3],
       [1, 2, 3]])

Beachten Sie, dass diese Art der Indizierung eine ndarray sein muss, wie Sie sie verwendet haben, und keine list. Andernfalls wird False und True als 0 und 1 interpretiert, und Sie erhalten folgende Spalten:

>>> b[:,[True, True, True, False, False]]   
array([[2, 2, 2, 1, 1],
       [2, 2, 2, 1, 1]])
37
DSM

Sie können das Modul numpy.ma verwenden und dazu die Funktion np.ma.masked_array verwenden. 

x = np.array ([1, 2, 3, -1, 5])
mx = ma.masked_array (x, mask = [0, 0, 0, 1, 0])

return: masked_array (Daten = [1, 2, 3, -, 5], Maske = [False, False, False, True, False], Füllwert = 999999

0
Negar