2016-08-03 101 views
6

我有幾個numpy數組,可以說a,bc,並且已經創建了一個mask來應用到它們全部。NumPy布爾值數組警告?

我試圖掩蓋它們的方式:

a = a[mask]

其中maskbool陣列。值得一提的是,我已經驗證了

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

而且我得到一個非常奇怪的冠冕堂皇的警告:

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

+1

這個錯誤表明你試圖使用一個0維布爾數組作爲索引。該操作的語義正在改變。你如何確認'mask'甚至是一個帶有'len'的東西? – user2357112

+0

等等,不,錯誤的警告。你有沒有得到一個'mask'的列表? – user2357112

回答

13

假== 0,和True == 1,如果你的面膜是一個列表,而不是ndarray,你可以得到一些意外的行爲:

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

,其中該陣列由的[1],A [ 0]和[1],就像

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

在另一方面:

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

該警告是告訴你,最終a[mask_list]會給你一樣a[mask_array](這大概是什麼你想讓它擺在首位。)

+0

啊,非常感謝,有道理。通過'mask = np.array(mask_expression,dtype = bool)將列表強制轉換爲一個numpy數組, – Anonymous

相關問題