2016-09-08 4 views
1

Выход следующего кода: НИЧЕГО.Как работать ", если np.array ([False]):"

if np.array([False]): 
    print("hello") 

Хотя я пытался его искать, я не знаю, как это работает. Может ли перегрузка Python if?

Ниже приведен пример чистого массива.

if [False]: 
    print("hello") 

Выход hello

ли вы сказать мне, как код np.array?

+1

Да, вы можете изменить его с помощью [ '__bool__'] (https://docs.python.org/3.1/reference /datamodel.html#object.__bool__) в Python 3 и ['__nonzero__'] (https://docs.python.org/2/reference/datamodel.html#object.__nonzero__) в Python 2. –

+0

Большое спасибо !! Вы отвечаете, чтобы я понял. – redstone

+0

Почему вы это пытаетесь? Использование массива numpy в выражении if почти никогда не работает, как ожидают люди. – hpaulj

ответ

1

if [False]: всегда будет True потому [Flase] список с одним элементом (то есть, не пусто), поэтому if блок будет введен, и вы увидите выход вашего print вызова.

np.array([False])

возвращает numpy.ndarray, который в этом случае оценивает в False, поэтому if блок никогда не будет введен, и вы не увидите никакого вывода.

2

кажется np.array ([]) возвращает значение False и так сделать для 0 и False

>>> bool(np.array([])) 
False 
>>> bool(np.array([0])) 
False 
>>> bool(np.array([False])) 
False 

Вот список возвращает истину, если она имеет какой-либо предмет ..

>>> bool([False]) ### the returned boolean value is based on the length of the list. 
True 
2

Одна вещь Я заметил, что if np.array([False]) или bool(np.array([False]) возвращает bool единственного элемента в массиве. И вы не должны иметь более одного элемента в массиве numpy, если вы делаете if или bool.

Если есть более одного элемента, должны использовать a.any() или a.all()

>>> if np.array([False, False]): 
... print 's' 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> bool(np.array([False, False])) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> 
>>> 
>>> bool(np.array([False, 232])) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> 
>>> 
>>> bool(np.array([False, 232]).any()) 
True 
>>> 
Смежные вопросы