user3598726
user3598726

Reputation: 1071

How to check efficiently numpy array contains item within given range?

I have a numpy array, called a , I want to check whether it contains an item in a range, specified by two values.

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

mintrshold=33
maxtreshold=66

My solution:

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

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

Can you suggest me a more effective, pythonic way?

Upvotes: 6

Views: 1188

Answers (2)

gold_cy
gold_cy

Reputation: 14216

Adding to the pure Numpy answer we can also use itertools

import itertools

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

For smaller arrays this would suffice:

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

Upvotes: 2

Slam
Slam

Reputation: 8572

Numpy arrays doesn't work well with pythonic a < x < b. But there's func for this:

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

or

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

in your particular case. Basically, you should combine two element-wise ops. Look for logic funcs for more details

Upvotes: 10

Related Questions