2016-08-03 29 views
6

Birkaç numpy dizim var, a, b ve c diyelim ve hepsine uygulanacak bir mask oluşturduk.NumPy boolean dizisi uyarısı?

Ben bunları özel olarak maskelemek için çalışıyorum:

a = a[mask]

nerede mask bir bool dizidir. Bu Doğruladım dikkati çekiyor o

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

Ve oldukça şifreli sondaj uyarısı alıyorum:

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

+1

Bu hata, 0 boyutlu bir boole dizisini bir indeks olarak kullanmaya çalıştığınızı gösterir. Bu operasyonun semantiği değişiyor. Maske 'len' ile bir şey olduğunu nasıl doğruladın? – user2357112

+0

Bekleyin, hayır, yanlış uyarı. Maske için bir liste aldın mı? – user2357112

cevap

13

Yanlış == 0, ve True == 1. Eğer senin maske listesidir değil bir ndarray, beklenmedik bir davranışla alabilirsiniz:

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

bu dizi oluşur bir [1], bir [ 0] ve [1], sadece Öte yandan

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

gibi:

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

uyarı sonunda a[mask_list] muhtemelen ne olduğu (a[mask_array] olarak size aynı verecektir size anlatıyor ilk etapta vermek istediniz.)

+0

Ahh, çok teşekkürler, mantıklı. Listeyi "mask = np.array (mask_expression, dtype = bool)" ile numpy dizisine dökerek düzeltildi – Anonymous