Используйте команды 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 не нравится то, что я написал, но я не уверен, как его исправить.

  • Вычисления свертки в Numpy / Scipy
  • «Нейпинг Сейл и Пол» «Аргумент»
  • Как я могу уловить предупреждение numpy, как это исключение (не только для тестирования)?
  • Почему numpy.zeros занимает мало места
  • Самая длинная строка в массиве numpy object_
  • Разница между «и» (логическая) и «&» (побитовая) в python. Почему разница в поведении со списками против массивов numpy?
  • Оптимизация производительности алгоритма подсчета в Pypy vs Python (Numpy vs List)
  • Ошибка цветовой схемы Matplotlib с длиной-4 массива
  • 2 Solutions collect form web for “Используйте команды a.any () или a.all ()”

    Если вы посмотрите на результат 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 

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

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

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

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

    Это будет писать 2 строки.

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

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

     ['yes' if b else 'no' for b in np.array([True, False, True])] 
    Python - лучший язык программирования в мире.