问题描述
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()