即使两个数组相同,Numpy 也会返回 False?
Numpy returning False even though both arrays are the same?
根据我对 numpy 的理解,np.equal([x, prod])
命令逐个元素地比较数组,returns 如果它们相等,则每个元素都为真。但是每次执行命令时,第一次比较都是 returns False 。另一方面,如果我将两个数组复制粘贴到命令中,它 returns 对两者都是正确的,如您在屏幕截图中所见。那么,为什么两者会有区别呢?
您不能比较浮点数,因为它们只是一个近似值。当您通过硬编码值比较它们时,它们将相等,因为它们以完全相同的方式近似。但是一旦你对它们应用了一些数学运算,就不再可能检查两个浮点数是否相等。
比如这个
a = 0
for i in range(10):
a += 1/10
print(a)
print(a == 1)
会给你 0.9999999999
和 False
,即使 (1/10) * 10 = 1.
要比较浮点值,您需要将两个值与一个小的增量值进行比较。换句话说,检查它们是否只是一个非常小的值。例如
a = 0
for i in range(10):
a += 1/10
delta = 0.00000001
print(a)
print(abs(a - 1) < delta)
会给你True
.
对于 numpy,如果您只想要 True 或 False 值,可以使用 numpy.isclose to get a mask or numpyp.allclose。
根据我对 numpy 的理解,np.equal([x, prod])
命令逐个元素地比较数组,returns 如果它们相等,则每个元素都为真。但是每次执行命令时,第一次比较都是 returns False 。另一方面,如果我将两个数组复制粘贴到命令中,它 returns 对两者都是正确的,如您在屏幕截图中所见。那么,为什么两者会有区别呢?
您不能比较浮点数,因为它们只是一个近似值。当您通过硬编码值比较它们时,它们将相等,因为它们以完全相同的方式近似。但是一旦你对它们应用了一些数学运算,就不再可能检查两个浮点数是否相等。
比如这个
a = 0
for i in range(10):
a += 1/10
print(a)
print(a == 1)
会给你 0.9999999999
和 False
,即使 (1/10) * 10 = 1.
要比较浮点值,您需要将两个值与一个小的增量值进行比较。换句话说,检查它们是否只是一个非常小的值。例如
a = 0
for i in range(10):
a += 1/10
delta = 0.00000001
print(a)
print(abs(a - 1) < delta)
会给你True
.
对于 numpy,如果您只想要 True 或 False 值,可以使用 numpy.isclose to get a mask or numpyp.allclose。