如何用Python在数组中找到满足两个条件的值
我有一个数组
a=[1,2,3,4,5,6,7,8,9]
我想找到满足两个条件的元素 s 的索引,也就是说:
a>3 and a<8
ans=[3,4,5,6]
a[ans]=[4,5,6,7]
我可以使用 numpy.nonzero(a>3)
或 numpy.nonzero(a<8)
,
但是不能使用 numpy.nonzero(a>3 and a<8)
,这样会报错:
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()
当我尝试使用 any
或 all
时,我也会遇到同样的错误。
有没有办法把两个条件测试结合起来,得到答案呢?
4 个回答
0
如果你使用的是numpy数组,你可以直接用'&
'来代替'and
'。
a=array([1,2,3,4,5,6,7,8,9])
a[(a>3) & (a<8)]
ans=array([3,4,5,6])
3
我最后选择了一个替代方案,就是使用 numpy.logical_and
:
choice = numpy.logical_and(np.greater(a, 3), np.less(a, 8))
numpy.extract(choice, a)
27
numpy.nonzero((a > 3) & (a < 8))
& 是用来进行逐个元素的布尔与运算的。