allclose()和array_equal()有什么区别?

Har*_*ews 5 python numpy

Numpy具有以下方法:

allclose() -假设数组的形状相同,并且值比较的容差

array_equal() -检查形状和元素值,无公差(值必须完全相等)

我似乎找不到它们之间的任何区别。有什么例子吗?

Chr*_*ler 5

np.allclose设计用于浮点数数组。浮点计算具有固有的精度损失,因此您经常会发现自己的数字应该相等,但相差很小。

另一方面,np.array_equal它被设计为与整数数组一起使用,并且仅检查是否完全相等。

考虑以下示例,该示例生成一个包含 100 个浮点数的数组,将其除以 1.5,然后乘以 1.5。由于精度损失,阵列不再完全相等,但仍然接近在非常小的公差范围内。

arr = np.random.rand(1000)

arr2 = arr / 1.5
arr2 = arr2 * 1.5

print(np.array_equal(arr, arr2))
# False

print(np.allclose(arr, arr2, atol=1e-16, rtol=1e-16))
# True
Run Code Online (Sandbox Code Playgroud)