在阵列满足使用Python

问题描述:

两个条件如何找到值我有一个数组在阵列满足使用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() 

当我尝试使用anyall时,我得到相同的错误。 是否可以结合两个条件测试来获得答案?

+1

为什么你需要numpy,你不能这样做!过滤器(lambda a:3 shahjapan 2010-07-14 17:41:30

+1

@shahjapan - 可能是因为它们需要增加一个numpy数组的速度,因为它们可能真的有很多大得多的数据集。 – 2010-07-14 17:59:36

numpy.nonzero((a > 3) & (a < 8)) 

&做一个元素明智的布尔和。

+0

谢谢马修,工作就像一个魅力! – David 2010-07-14 17:11:27

一种替代(我结束了使用)是numpy.logical_and

choice = numpy.logical_and(np.greater(a, 3), np.less(a, 8)) 
numpy.extract(choice, a) 

如果使用numpy的阵列,则可以直接使用 '&' 而不是 'and'。

a=array([1,2,3,4,5,6,7,8,9]) a[(a>3) & (a<8)] ans=array([3,4,5,6])