2012-02-15 91 views
13

我有兩個NumPy的陣列,例如:如何使用另一個數組的值過濾numpy數組?

a = [1,2,3,4,5] 

和濾波器陣列,例如:

f = [False, True, False, False, True] 

len(a) == len(f) 

我怎樣才能只值一個新numpy的陣列中,其中相同指數f是真的嗎?在我的情況下:[2, 5]

根據所接受的溶液(具有不同的值):

>>> a = numpy.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = numpy.array([True, False, True, False, True, False, True, False, True, False]) 
>>> a[b] 
array([1, 3, 5, 7, 9]) 
+2

它看起來像b是一個不是數組的列表,b必須是一個布爾數組。嘗試'b = np.asarray(b,'bool')' – 2012-02-15 16:13:06

回答

22

NumPy的支持boolean indexing

a[f] 

這假定af是NumPy的陣列,而不是Python列表(如在問題)。你可以用f = np.array(f)轉換。

+0

這似乎不起作用:請參閱問題。 – 2012-02-15 16:04:18

+2

確保'b'是一個numpy數組。在答案中更新。 – YXD 2012-02-15 16:08:17

+1

我根據您的解決方案對其進行了更改,並在問題中發表評論......現在可以使用了,謝謝! – 2012-02-15 16:13:38

3

如果您還沒有需要numpy的陣列,這裏有一個簡單的列表:

import itertools 
print itertools.compress(a, f) 

對於預2.7版本的Python,你必須推出自己的(參見手冊):

def compress(data, selectors): 
    return (d for d, s in itertools.izip(data, selectors) if s) 
相關問題