NumPy中array.any()与np.any(array())的差异及结果困惑求解
问题原因解析
这两种写法根本不等价,核心是运算符优先级和执行顺序的差异:
先看
np.array([-1, 0, 1]).any() < 0- 执行顺序是先调用数组的
.any()方法:这个方法会检查数组里是否有非零元素,你的数组里有-1和1,所以.any()返回布尔值True。 - 然后把这个布尔值和0比较:在Python中
True等价于整数1,所以实际是判断1 < 0,结果自然是False。
- 执行顺序是先调用数组的
再看
np.any(np.array([-1, 0, 1]))- 直接调用
np.any()函数,传入整个数组,函数同样检查数组是否存在非零元素,返回True——这和数组.any()方法的功能一致,但这里没有后续的比较操作。
- 直接调用
如果你原本想判断数组中是否存在小于0的元素,正确的写法应该是先做元素级的比较,再调用.any():
(np.array([-1, 0, 1]) < 0).any() # 或者 np.any(np.array([-1, 0, 1]) < 0)
这两种写法才会先生成布尔数组[True, False, False],再判断是否有True,最终返回True。
内容的提问来源于stack exchange,提问作者faustus
相关产品推荐
相关产品推荐

