在Python中,你可以做以下事情:
>>> 3 < 4 < 5
True
>>> 3 < 4 < 4
False
这是怎么回事?我认为4 < 5
会返回一个布尔值,所以3 < True
应该返回False
,或者3 < 4
应该返回一个布尔值,所以如果True
可以转换为整数1,True < 4
可能应该返回True
?.
为什么它不适用于numpy数组?
>>> 1 < np.array([1, 2, 3]) < 3
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
它可以用于numpy数组吗?
2条答案
按热度按时间wecizke31#
根据Python文档:
比较可以任意链接,例如,
x < y <= z
等价于x < y and y <= z
,除了y
只计算一次(但在这两种情况下,当x < y
被发现为假时,z
根本不计算)。所以你的例子相当于:
因此每个子项都期望得到布尔值。但副项:
结果是一个新的numpy数组,包含:
Python试图将这个值解释为布尔值。它无法做到这一点,并生成错误消息:
我希望这里的表达式是:
这不能简化为使用比较链接。
9lowa7mx2#
我试图做到这一点,并提出了以下可能是次优的解决方案。
这给出了我想要的
3 < a < 15
的答案。