在将按位运算符和比较运算符与numpy数组一起使用时,内部会发生什么并引发ValueError?

问题描述

import numpy as np

arr = np.array([3,4,6,15,25,38])


print(arr > 5 & arr <= 20)

"""Output
Traceback (most recent call last):
  File "main.py",line 11,in <module>
    print(arr > 5 & arr <= 20)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
"""

我知道会发生此错误,因为我错过了条件周围的括号。但是我想知道表达式的计算顺序以及导致此错误的原因。

解决方法

&<=higher precedence,因此它以arr > (5 & arr) <= 20 and since comparison operators are chained的身份运行,等效于:

(arr > (5 & arr)) and (arr <= (5 & arr))

这会导致众所周知的错误,因为您不能在布尔上下文中使用数组,如错误消息所解释的...(注意,5 & arr仅被评估一次...)

所以请考虑,即使这样也会失败:

>>> arr = np.array([1,2,3,4,5])
>>> 0 < arr < 4
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()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...