理解numpy数组中any()和all()的使用

问题描述 投票:0回答:3

以下有什么区别:

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'

python arrays numpy logic conditional-statements
3个回答
3
投票

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())

1
投票

在像你这样的一维numpy整数数组上,当且仅当

some
元素非零时,
any
才会给你True,而当且仅当
all
元素时
all
会给你True非零。

所以你的第一段代码翻译成:
“如果问题‘

a
中是否存在非零元素?’的答案,则打印 yes与“
b
的所有元素都非零吗?”的答案相同。

第二个进入:
“如果问题‘

a
中是否存在非零元素?’的答案,则打印 yes与“
b
中是否存在非零元素?”的答案相同。


0
投票

我认为原来的帖子是由于在比较两个表时对组合逻辑操作(例如 ==)和方法 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)
© www.soinside.com 2019 - 2024. All rights reserved.