给定 X numpy 数组,return 如果其任何元素为零则为真

Given the X numpy array, return True if any of its elements is zero

X给出如下:

X = np.array([-1, 2, 0, -4, 5, 6, 0, 0, -9, 10])

我的回答是:any(X==0).
但是标准答案是X.any(),而且是returnsTrue,搞不懂

对我来说,X.any() 正在查找数组中是否有任何 True1。在这种情况下,由于给定的 X 数组中没有 1,因此它应该返回 False。我做错了什么?提前致谢!

X.any() 是一个不正确的答案,它会在 X = np.array([0]) 上失败,例如(错误地返回 False)。

正确答案是:~X.all()。根据De Morgan's laws任何元素为0等价于NOT(所有元素为(NOT 0)).

它是如何工作的?

Numpy 正在隐式转换为布尔值:

X = np.array([-1, 2, 0, -4, 5, 6, 0, 0, -9, 10])
# array([-1, 2, 0, -4, 5, 6, 0, 0, -9, 10])

# convert to boolean
# 0 is False, all other numbers are True
X.astype(bool)
# array([ True,  True, False,  True,  True,  True, False, False,  True, True])

# are all values truthy (not 0 in this case)?
X.astype(bool).all()
# False

# get the boolean NOT
~X.astype(bool).all()
# True