如何解决在将按位运算符和比较运算符与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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。