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!
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]])
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