在 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