如何用Python在数组中找到满足两个条件的值

20 投票
4 回答
23713 浏览
提问于 2025-04-16 01:17

我有一个数组

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

当我尝试使用 anyall 时,我也会遇到同样的错误。

有没有办法把两个条件测试结合起来,得到答案呢?

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

& 是用来进行逐个元素的布尔与运算的。

撰写回答