2017-02-09 2 views
3

Как искать числа, находящиеся между диапазоном?Python: массив numpy больше и меньше значения

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

Однако, когда я даю с в двух чисел, то возвращают ошибку

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

Выходное желание

array([False, True, True, False, False] 
+0

Возможный дубликат [Объединение логических операторов И в Numpy массиве] (http://stackoverflow.com/questions/21996661/combining-logic-statements-and-in -numpy-array) – Moberg

ответ

4

Попробуйте это,

(c > 2) & (c < 5) 

Результат

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

Python оценивает 2<c<5, как (2<c) and (c<5), который будет действительным, за исключением ключевое слово and не работает, как хотелось бы с массивами numpy. (Он пытается бросить каждый массив к одному булевым, и что поведение не может быть изменено, как описано here.) Таким образом, для векторизованного and работы с массивами Numpy вам нужно сделать, это:

(2<c) & (c<5)

+1

Я исправил '&&' 'и'. –

1

Вы можете сделать что-то вроде этого:

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

Выход:

[False, True, True, False, False]