Подтвердить что ты не робот

Используйте команды a.any() или a.all()

x = np.arange(0,2,0.5)
valeur = 2*x

if valeur <= 0.6:
    print ("this works")
else:   
    print ("valeur is too high")

вот ошибка, которую я получаю:

if valeur <= 0.6:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я прочитал несколько сообщений об a.any() или a.all(), но все еще не могу найти способ, который действительно четко объясняет, как исправить проблему. Я понимаю, почему Python не нравится то, что я написал, но я не уверен, как его исправить.

4b9b3361

Ответ 1

Если вы посмотрите на результат valeur <= 0.6, вы увидите, что вызывает эту двусмысленность:

>>> valeur <= 0.6
array([ True, False, False, False], dtype=bool)

Таким образом, результатом является другой массив, который имеет в этом случае 4 булевых значения. Теперь, каков должен быть результат? Должно ли условие быть истинным, когда одно значение истинно? Должно ли условие быть истинным только тогда, когда все значения верны?

То, что делают numpy.any и numpy.all. Первое требует хотя бы одного истинного значения, последнее требует, чтобы все значения были истинными:

>>> np.any(valeur <= 0.6)
True
>>> np.all(valeur <= 0.6)
False

Ответ 2

Вы комментируете:

valeur - это вектор, равный [0. 1. 2. 3.] Меня интересует каждый отдельный член. Для части ниже 0.6, затем верните "это работает"....

Если вас интересует каждый термин, напишите код, чтобы он касался каждого. Например.

for b in valeur<=0.6:
    if b:
        print ("this works")
    else:   
        print ("valeur is too high")

Это приведет к записи двух строк.

Ошибка создается кодом numpy, когда вы пытаетесь использовать его в контексте, который ожидает одно скалярное значение. if b:... может делать только одно. Он сам по себе не выполняет итерации элементов b, делая для каждой вещи разные вещи.

Вы также можете использовать эту итерацию в качестве понимания списка, например.

['yes' if b else 'no' for b in np.array([True, False, True])]