Как настроить & ldquo; Добавить в корзину & ​​rdquo; кнопка продукта?

Причиной исключения является то, что and неявно вызывает bool. Сначала в левом операнде и (если левый операнд True), то в правом операнде. Таким образом, x and y эквивалентен bool(x) and bool(y).

Однако bool в 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 есть больше функций и операторов, hide 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:

0
задан fgtr 18 January 2019 в 04:43
поделиться