按元素比较两个 NumPy 数组是否相等

新手上路,请多包涵

比较两个 NumPy 数组是否相等的最简单方法是什么(其中相等定义为:A = B iff for all indices i: A[i] == B[i] )?

简单地使用 == 给我一个布尔数组:

  >>> numpy.array([1,1,1]) == numpy.array([1,1,1])

array([ True,  True,  True], dtype=bool)

我是否必须 and 这个数组的元素来确定数组是否相等,或者是否有更简单的比较方法?

原文由 clstaudt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 865
2 个回答
(A==B).all()

测试数组 (A==B) 的所有值是否为真。

注意:也许你还想测试A和B形状,比如 A.shape == B.shape

特殊情况和替代方案(来自 dbaupp 的回答和 yoavram 的评论)

应当指出的是:

  • 此解决方案在特定情况下可能会有奇怪的行为:如果 AB 为空,而另一个包含单个元素,则它返回 True .出于某种原因,比较 A==B 返回一个空数组, all 运算符返回 True
  • 另一个风险是如果 AB 不具有相同的形状并且不可广播,则此方法将引发错误。

总之,如果您对 AB 形状有疑问或者只是想安全起见:使用其中一个专门的功能:

 np.array_equal(A,B)  # test if same shape, same elements values
np.array_equiv(A,B)  # test if broadcastable shape, same elements values
np.allclose(A,B,...) # test if same shape, elements have close enough values

原文由 Juh_ 发布,翻译遵循 CC BY-SA 4.0 许可协议

(A==B).all() 解决方案非常简洁,但是有一些内置函数可用于此任务。即 array_equalallclosearray_equiv

(虽然,一些使用 timeit 的快速测试似乎表明 (A==B).all() 方法是最快的,这有点奇怪,因为它必须分配一个全新的数组。)

原文由 huon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题