2016-08-03 46 views
6

Mam kilka numpy tablic, powiedzmy a, b i c i utworzyłem mask, aby zastosować do wszystkich z nich.NumPy tablica boolean ostrzeżenie?

staram się maskować je jako takie:

a = a[mask]

gdzie mask jest bool tablicą. Warto zauważyć, że sprawdzili, że

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

i otrzymuję dość tajemniczą brzmiące ostrzeżenie:

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

+1

Ten błąd oznacza, że ​​próbujesz użyć 0-wymiarowej tablicy boolowskiej jako indeksu. Semantyka tej operacji jest w trakcie zmiany. Jak zweryfikowałeś, że 'maska' jest czymś w rodzaju' len'? – user2357112

+0

Czekaj, nie, złe ostrzeżenie. Czy w jakiś sposób otrzymałeś listę "maski"? – user2357112

Odpowiedz

13

fałszywy == 0 i prawdziwe == 1. Jeśli twój Maska jest lista, a nie ndarray można uzyskać pewne nieoczekiwane zachowanie:

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

gdzie jest ta tablica składa się z [1], w [ 0] i [1], tak jak

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

Z drugiej strony:

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

Ostrzeżenie jest informacją, że w końcu a[mask_list] daje takie same jak a[mask_array] (co jest chyba to, co chciałbyś, żeby ci to dało.)

+0

Ahh, wielkie dzięki, ma sens. Naprawiono przez rzutowanie listy na tablicę numpy poprzez 'mask = np.array (wyrażenie_maski, dtype = bool) – Anonymous