Причиною винятку є те, що and
неявно дзвонить bool
. Спочатку на лівий операнд і (якщо лівий операнд True
), потім на правий операнд. Так що x and y
еквівалентно bool(x) and bool(y)
.
Однак bool
на a numpy.ndarray
(якщо він містить більше одного елемента) буде викинуто ви бачили виняток:
>>> import numpy as np
>>> arr = np.array([1, 2, 3])
>>> bool(arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
bool()
Виклик неявно в and
, а й в if
, while
, or
, так що будь-який з наступних прикладів теж не буде:
>>> arr and arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> if arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> while arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr or arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
У Python є більше функцій та висловлювань, які приховують bool
дзвінки, наприклад, 2 < x < 10
це просто ще один спосіб запису 2 < x and x < 10
. І and
будемо називати bool
: bool(2 < x) and bool(x < 10)
.
Поелементно еквівалент and
б бути np.logical_and
функція, так само можна використовувати np.logical_or
як еквівалент для or
.
Для логічних масивів - і порівняно подобається <
, <=
, ==
, !=
, >=
і >
на NumPy масиви повертають булеві масиви Numpy - ви також можете використовувати поелементно бітові функції (і оператор): np.bitwise_and
( &
оператор)
>>> np.logical_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> np.bitwise_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> (arr > 1) & (arr < 3)
array([False, True, False], dtype=bool)
і bitwise_or
( |
оператор):
>>> np.logical_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> np.bitwise_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> (arr <= 1) | (arr >= 3)
array([ True, False, True], dtype=bool)
Повний перелік логічних та бінарних функцій можна знайти в документації NumPy: