简体   繁体   中英

Python: numpy array larger and smaller than a value

How to look for numbers that is between a range?

c = array[2,3,4,5,6]
>>> c>3
>>> array([False, False, True, True, True]

However, when I give c in between two numbers, it return error

>>> 2<c<5
>>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

The desire output is

array([False, True, True, False, False]

Try this,

(c > 2) & (c < 5)

Result

array([False,  True,  True, False, False], dtype=bool)

Python evaluates 2<c<5 as (2<c) and (c<5) which would be valid, except the and keyword doesn't work as we would want with numpy arrays. (It attempts to cast each array to a single boolean, and that behavior can't be overridden, as discussed here .) So for a vectorized and operation with numpy arrays you need to do this:

(2<c) & (c<5)

You can do something like this :

import numpy as np
c = np.array([2,3,4,5,6])
output = [(i and j) for i, j in zip(c>2, c<5)]

Output :

[False, True, True, False, False]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM