2016-08-03 39 views
6

Ich habe ein paar numpy Arrays, sagen wir a, b, und c, und haben eine mask erstellt, um auf alle von ihnen anzuwenden.NumPy Boolean Array Warnung?

Ich versuche, sie als solche zu maskieren:

a = a[mask]

wo mask ist ein bool Array. Es ist erwähnenswert, dass ich überprüft haben, dass

len(a) = len(b) = len(c) = len(mask)

und ich bin ein ziemlich kryptisch klingt Warnung erhalten:

FutureWarning: in the future, boolean array-likes will be handled as a boolean array index

+1

Dieser Fehler zeigt an, dass Sie versuchen, ein 0-dimensionales boolesches Array als Index zu verwenden. Die Semantik dieser Operation wird gerade geändert. Wie hast du verifiziert, dass "Maske" sogar eine Sache mit einem "len" ist? – user2357112

+0

Warte, nein, falsche Warnung. Hast du irgendwie eine Liste für "Maske" bekommen? – user2357112

Antwort

13

Falsch == 0, True == 1. Wenn Ihr Maske ist eine Liste, und nicht ein ndarray, können Sie etwas unerwartetes Verhalten erhalten:

>>> a = np.array([1,2,3]) 
>>> mask_list = [True, False, True] 
>>> a[mask_list] 
__main__:1: FutureWarning: in the future, boolean array-likes will be handled as a boolean array index 
array([2, 1, 2]) 

wo diese Anordnung aus einem gemacht wird [1], a [ 0] und a [1], genau wie

>>> a[np.array([1,0,1])] 
array([2, 1, 2]) 

Auf der anderen Seite:

>>> mask_array = np.array(mask_list) 
>>> mask_array 
array([ True, False, True], dtype=bool) 
>>> a[mask_array] 
array([1, 3]) 

Die Warnung Sie sagt, dass schließlich a[mask_list] geben Sie das gleiche wie a[mask_array] (das ist wahrscheinlich das, was Sie wollten es Ihnen an erster Stelle geben.)

+0

Ahh, vielen Dank, macht Sinn. Festgelegt, indem die Liste über 'mask = np.array (mask_expression, dtype = bool)' in ein numpliges Array umgewandelt wurde – Anonymous