如何有效地检查numpy数组包含给定范围内的项目?

时间:2017-05-31 10:15:13

标签: python arrays numpy

我有一个名为a的numpy数组,我想检查它是否包含一个范围内的项目,由两个值指定。

import numpy as np
a = np.arange(100)

mintrshold=33
maxtreshold=66

我的解决方案:

goodItems = np.zeros_like(a)
goodItems[(a<maxtreshold) & (a>mintrshold)] = 1

if goodItems.any(): 
   print (there s an item within range)

你能建议我一种更有效,更健康的方式吗?

2 个答案:

答案 0 :(得分:3)

Numpy数组与pythonic a < x < b不兼容。但是有这样的功能:

np.logical_and(a > mintrshold, a < maxtreshold)

np.logical_and(a > mintrshold, a < maxtreshold).any()

在你的特定情况下。基本上,你应该结合两个逐元素的操作。查找logic funcs了解更多详情

答案 1 :(得分:1)

添加纯Numpy答案,我们也可以使用itertools

import itertools

bool(list(itertools.ifilter(lambda x: 33 <= x <= 66, a)))

对于较小的阵列,这就足够了:

bool(filter(lambda x: 33 <= x <= 66, a))