Python 如何使用另一个数组过滤numpy数组';s的价值观?

Python 如何使用另一个数组过滤numpy数组';s的价值观?,python,arrays,filter,numpy,Python,Arrays,Filter,Numpy,我有两个NumPy阵列,例如: a = [1,2,3,4,5] 和过滤器阵列,例如: f = [False, True, False, False, True] len(a) == len(f) 如果f中的相同索引为真,如何获得一个只包含a中值的新numpy数组?就我而言:[2,5] 根据接受的解决方案(具有不同的值): NumPy支持 这假设a和f是NumPy数组而不是Python列表(如问题中所述)。如果您还不需要numpy数组,可以使用f=np.array(f)进行转换,下面是一个简

我有两个NumPy阵列,例如:

a = [1,2,3,4,5]
和过滤器阵列,例如:

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

len(a) == len(f)
如果
f
中的相同索引为真,如何获得一个只包含a中值的新numpy数组?就我而言:
[2,5]

根据接受的解决方案(具有不同的值):

NumPy支持


这假设
a
f
是NumPy数组而不是Python列表(如问题中所述)。如果您还不需要numpy数组,可以使用
f=np.array(f)

进行转换,下面是一个简单的列表:

import itertools
print itertools.compress(a, f)
对于python 2.7之前的版本,您必须使用自己的(请参阅手册):


确保
b
是一个numpy数组。更新了答案。我根据您的解决方案和问题中的评论进行了更改。。。现在它工作了,谢谢!最近开始学习numpy,我最想说的是布尔索引非常令人惊讶,看起来b是列表而不是数组,b必须是布尔数组。尝试
b=np.asarray(b,'bool')
a[f]
import itertools
print itertools.compress(a, f)
def compress(data, selectors):
    return (d for d, s in itertools.izip(data, selectors) if s)