如何使用另一个数组的值过滤numpy数组?

时间:2012-02-15 15:55:58

标签: python arrays filter numpy

我有两个NumPy数组,例如:

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

和过滤器数组,例如:

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

len(a) == len(f)

如何才能获得一个新的numpy数组,其中只包含f中相同索引为True的值?就我而言:[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 个答案:

答案 0 :(得分:27)

NumPy支持boolean indexing

a[f]

这假设af是NumPy数组而不是Python列表(如问题所示)。您可以使用f = np.array(f)进行转换。

答案 1 :(得分: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)