当前位置: 首页 > 知识库问答 >
问题:

比较两个NumPy数组是否相等

蒋健
2023-03-14

比较两个NumPy数组是否相等的最简单方法是什么(其中相等定义为:A=B iff,用于所有索引i:A[i]

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

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

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

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


共有3个答案

瞿和硕
2023-03-14

如果要检查两个数组是否具有相同的形状元素,应使用np.array_equal,因为这是文档中推荐的方法。

就性能而言,不要期望任何相等性检查会击败另一个,因为没有太多空间来优化比较两个元素的。为了这个缘故,我还是做了一些测试。

import numpy as np
import timeit

A = np.zeros((300, 300, 3))
B = np.zeros((300, 300, 3))
C = np.ones((300, 300, 3))

timeit.timeit(stmt='(A==B).all()', setup='from __main__ import A, B', number=10**5)
timeit.timeit(stmt='np.array_equal(A, B)', setup='from __main__ import A, B, np', number=10**5)
timeit.timeit(stmt='np.array_equiv(A, B)', setup='from __main__ import A, B, np', number=10**5)
> 51.5094
> 52.555
> 52.761

几乎相等,没必要谈论速度。

(A==B). all()的行为与以下代码片段相似:

x = [1,2,3]
y = [1,2,3]
print all([x[i]==y[i] for i in range(len(x))])
> True

魏澄邈
2023-03-14

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

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

马凡
2023-03-14
(A==B).all()

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

注意:可能您还需要测试A和B形状,例如A.shape==B.shape

特殊情况和备选方案(摘自dbaupp的回答和yoavram的评论)

应当指出的是:

  • 此解决方案在特定情况下可能有奇怪的行为:如果aB为空,而另一个包含单个元素,则返回True。出于某种原因,比较A==B返回一个空数组all运算符为其返回True

总之,如果您对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
 类似资料:
  • 问题内容: 比较两个NumPy数组是否相等的最简单方法是什么(其中相等定义为:对于所有索引i:,A = B iff )? 简单地使用就会给我一个布尔数组: 我是否必须确定该数组的元素是否相等,或者是否有更简单的比较方法? 问题答案: 测试数组(A == B)的所有值是否均为True。 注意:也许您还想测试A和B形状,例如 特殊情况和替代方法 (来自dbaupp的回答和yoavram的评论) 应当指

  • 是否有一种惯用的方法来比较两个NumPy数组,它们将NaN视为彼此相等(但不等于NaN以外的任何东西)。 例如,我希望以下两个数组比较相等: 和以下两个数组进行比较: 我正在寻找一种可以产生标量布尔结果的方法。 以下方法可以做到这一点: 但它很笨重,并且创建了所有这些中间数组。 有没有一种方法可以更容易地观察眼睛,更好地利用记忆? 另外,如果有帮助的话,已知数组具有相同的形状和数据类型。

  • 我做了这个扩展方法来检查一个类型是否实现了一个接口。要使其正常工作,它需要比较两种类型。然而,这种比较似乎并不现实: 这是我比较失败的情况: 正如注释中提到的,如果我比较类型名,那么它总是按照预期工作。我想知道这是怎么回事。

  • 问题内容: 有人遇到过这个问题吗?假设您有两个类似以下的数组 有没有一种方法可以比较b中a中的哪些元素?例如, 我正在尝试避免循环,因为要花费数百万个元素才能解决问题。有任何想法吗? 干杯 问题答案: 实际上,有一个比以下任何一种方法更简单的解决方案: 所得的c为:

  • 本文向大家介绍JS中比较两个Object数组是否相等方法实例,包括了JS中比较两个Object数组是否相等方法实例的使用技巧和注意事项,需要的朋友参考一下 一、问题 在js中是不能直接用“==”或者“===”来计算两个数组是否相等的,那么就需要对数组的值进行比较; 二、次解决方案 对于比较两个数组次要的方法有如下几种,为什么说是次要解决方案呢?因为它不能真正称之为对两个数组的对比。 1. 把两个数

  • 本文向大家介绍JavaScript比较两个数组的内容是否相同(推荐),包括了JavaScript比较两个数组的内容是否相同(推荐)的使用技巧和注意事项,需要的朋友参考一下 今天意外地发现JavaScript是不能用==或===操作符直接比较两个数组是否相等的。 以上两句代码都会弹出false。 因为JavaScript里面Array是对象,==或===操作符只能比较两个对象是否是同一个实例,也就是