以下有什么区别:
a = np.array([2,3,4])
b = np.array([2,7,8])
if a.any() == b.all():
print('yes')
和
a = np.array([2,3,4])
b = np.array([2,7,8])
if a.any() == b.any():
print('yes')
在这两种情况下,都会打印
'yes'
。
any()
和 all()
用于布尔数组。如果数组中存在等于 any()
的值,则 True
返回 True
。如果数组中的所有值都等于 all()
,则 True
返回 True
。
对于整数/浮点数,功能类似,只是如果在数组中找不到值 True
,它们会返回 0
。
在您的示例中,由于 a.any()
和 a.all()
都会返回 True
,因此 a.any() == a.all()
。
尝试执行以下代码,看看它在实践中是如何工作的。
a = np.asarray([1,2,3])
b = np.asarray([-1,0,1])
c = np.asarray([True, False])
print(a.any())
print(a.all())
print(b.any())
print(b.all())
print(c.any())
print(c.all())
在像你这样的一维numpy整数数组上,当且仅当
some元素非零时,
any
才会给你True
,而当且仅当all元素时
all
会给你True
非零。
所以你的第一段代码翻译成:
“如果问题‘
a
中是否存在非零元素?’的答案,则打印 yes与“b
的所有元素都非零吗?”的答案相同。
第二个进入:
“如果问题‘
a
中是否存在非零元素?’的答案,则打印 yes与“b
中是否存在非零元素?”的答案相同。
我认为原来的帖子是由于在比较两个表时对组合逻辑操作(例如 ==)和方法 np.any() 和 np.all() 的误解造成的。根据@user2653663的回答,我认为值得通过以下示例来完成它:
a = np.asarray([1,2,3])
b = np.asarray([1,0,1])
print((a == b).any())
print((a == b).all())
True
False
第一次打印将返回 True,因为“逐个单元格”的比较操作在两个表中找到至少 1 个相同的单元格;在我们的例子中,a[0] == b[0]。第二个返回 False,因为并非所有单元格都相等。您可以通过以下操作轻松想象出原因:
print(a == b)