【问题标题】:Understanding the use of any() and all() in numpy arrays了解 numpy 数组中 any() 和 all() 的使用
【发布时间】:2018-11-20 22:10:23
【问题描述】:

以下有什么区别:

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'

【问题讨论】:

  • 这些更适用于布尔数组。预期的操作是什么?
  • 对于整数,只有 0 算作False。由于您的示例没有任何 0,allany 都返回 True
  • 这里要理解的一点是,您实际上从未将a 中的任何内容与b 中的任何内容进行比较。 a.any()b.all() 这两个表达式是自行计算的(正如其他 cmets 中所解释的,它们都计算为 True),因此您最终检查的是 True == True,这也是 True .
  • 感谢您的回复。作为后续,我将如何检查 a 中的至少一个元素是否与 b 相同,以及如何检查 a 中的所有元素是否与 b 相同(在相同的序列中,因此是相同的数组)。我想我可以减去它们,然后使用 any() 和 all()?

标签: python arrays numpy logic conditional-statements


【解决方案1】:

any()all() 用于布尔数组。如果数组中有任何等于 True 的值,any() 将返回 True。如果数组中的所有值都等于True,则all() 返回True。 对于整数/浮点数,功能类似,只是如果在数组中找不到值 0,它们会返回 True。 在您的示例中,由于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())

【讨论】:

  • 我没有意识到 any() 和 all() 只涉及布尔数组。感谢您的回复!
【解决方案2】:

在像你这样的一维 numpy 整数数组上,any 将给你True 当且仅当 some 元素非零,而all 会给你True 如果并且仅当 所有 元素都不为零时。

所以你的第一个 sn-p 代码转换为:
“如果回答‘a 中是否有一些非零元素?’,则打印 yes与“b 的所有元素都不是零吗?”的答案相同。

第二个进入:
“如果回答‘a 中是否有一些非零元素?’,则打印 yes与“b 中是否有一些非零元素?”的答案相同。

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2014-03-15
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多