NumPy数组all()方法真值判断结果异常的原因是什么
异常产生原因
这个结果不符合预期的核心问题是你搞错了all()方法的语义和代码执行顺序,和np.diagonal接口本身无关,逐段拆解执行逻辑就能看懂:
- 代码按从左到右的优先级执行,
np.diagonal(board).all() == 1会先运行np.diagonal(board).all()这部分。NumPy数组的all()方法作用是检查数组内所有元素是否都为真值(数值场景下非0即为真),返回值是单个布尔值,并不会自动判断元素是否等于某个目标值。
你拿到的对角线数组是[2., 2., 1.],三个元素全是非0值,所以np.diagonal(board).all()的返回结果是布尔值True。 - 之后才会执行
== 1的比较逻辑。Python中布尔类型是整数类型的子类,True对应的整数数值就是1,False对应0,所以你实际做的比较是True == 1,自然返回True。 - 你测试
np.diagonal(board).all() == 2时,实际比较的是True == 2,1不等于2所以返回False,这个结果符合预期纯粹是巧合,不代表你的代码逻辑写对了。
正确实现方式
如果要实现“判断对角线所有元素是否都等于1”的逻辑,需要把元素值比较的逻辑放到all()判断之前,正确写法如下:
# 写法1 (np.diagonal(board) == 1).all() # 写法2 np.all(np.diagonal(board) == 1)
上述代码会先逐元素比较对角线值是否等于1,得到布尔数组array([False, False, True]),再判断这个布尔数组是否全为True,最终返回正确结果False。
内容的提问来源于stack exchange,提问作者flowerboy
相关产品推荐
相关产品推荐

