在 Python 中比较两个数组

Muhammad Waiz Khan 2023年1月30日
  1. 在 Python 中使用 numpy.array_equal() 方法比较两个数组
  2. 在 Python 中使用 numpy.allclose() 方法比较两个数组
  3. 在 Python 中使用 numpy.array_equiv() 方法比较两个数组
  4. 在 Python 中使用 == 运算符和 numpy.all() 方法比较两个数组
在 Python 中比较两个数组

在本教程中,我们将研究各种方法来比较 Python 中的两个数组并检查它们是否相等。仅当它们的尺寸和值相同时,这两个数组才相等。如果两个数组具有相同的值,但是它们的顺序不相同,则这些数组将不被视为相等。

我们可以使用以下方法在 Python 中检查两个数组是否相等:

在 Python 中使用 numpy.array_equal() 方法比较两个数组

numpy.array_equal(a1, a2, equal_nan=False) 将两个数组 a1a2 作为输入,如果两个数组具有相同的形状和元素,则返回 True,否则该方法返回 Falseequal_nan= 关键字参数的默认值为 False,并且如果我们希望该方法将两个 NaN 值视为相等,则必须将其设置为 True

下面的示例代码演示了如何使用 numpy.array_equal() 方法在 Python 中比较两个数组。

import numpy as np

a1 = np.array([1, 2, 4, 6, 7])
a2 = np.array([1, 3, 4, 5, 7])
print(np.array_equal(a1, a1))
print(np.array_equal(a1, a2))

输出:

True
False

在 Python 中使用 numpy.allclose() 方法比较两个数组

numpy.allclose(a1, a2, rtol=1e-05, atol=1e-08, equal_nan=False) 方法将数组 a1a2 作为输入,如果 a1 的每个元素都等于 a2 的相应元素,或者它们的差值在容差范围内,则返回 True

公差值使用 a2rtolatol 参数计算:

atol + rtol * absolute(a2)

numpy.allclose() 方法在我们要检查最终数组是否等于期望数组的计算中很有用。我们可以使用 numpy.allclose() 方法通过以下方式比较 Python 中的两个数组:

import numpy as np

a1 = np.array([1, 2, 4, 6, 7])
a2 = np.array([1, 3, 4, 5, 7])
a3 = np.array([1, 3, 4.00001, 5, 7])
print(np.allclose(a1, a2))
print(np.allclose(a3, a2))

输出:

False
True

如上面的示例代码所示,默认情况下将忽略两个值之间的差异 0.00001。我们可以更改 atolrtol 的值以增加公差值。

在 Python 中使用 numpy.array_equiv() 方法比较两个数组

numpy.array_equiv(a1, a2) 方法将数组 a1a2 作为输入,如果两个数组的形状和元素相同,则返回 True。否则,返回 False

我们可以将两个数组都传递给 numpy.array_equiv() 方法,以便在 Python 中进行比较。下面的示例代码演示了如何使用 numpy.array_equal() 方法来检查 Python 中两个数组是否相等。

import numpy as np

a1 = np.array([1, 2, 4, 6, 7])
a2 = np.array([1, 3, 4, 5, 7])
a3 = np.array([1, 3, 4.00001, 5, 7])
print(np.array_equiv(a1, a2))
print(np.array_equiv(a3, a2))

输出:

False
False

在 Python 中使用 == 运算符和 numpy.all() 方法比较两个数组

与数组一起使用时,== 运算符将返回形状与两个数组均等的数组,如果两个数组中的元素在该索引中相等,则返回的数组在索引处包含 True,否则数组将返回在该索引处包含 False

由于我们要比较两个数组而不是每个元素,因此可以将 numpy.all() 方法与 == 运算符一起使用。如果沿着给定轴的所有输入数组元素均为 True,则 numpy.all() 方法将返回 True;否则,返回 False

注意
如果两个数组均为空或一个数组的长度为 1,则此方法返回 True。如果两个数组的形状不相同,也会引发错误;这就是为什么必须首选上述方法的原因。

下面的示例代码演示了如何使用 == 运算符和 numpy.all() 方法来比较 Python 中的两个数组。

import numpy as np

a1 = np.array([1, 2, 4, 6, 7])
a2 = np.array([1, 3, 4, 5, 7])
a3 = np.array([1, 3, 4.00001, 5, 7])

print((a1 == a2).all())
print((a3 == a2).all())

输出:

False
False