【问题标题】:Numpy returning False even though both arrays are the same?即使两个数组相同,Numpy 也会返回 False?
【发布时间】:2020-03-12 17:24:21
【问题描述】:

根据我对 numpy 的理解,np.equal([x, prod]) 命令逐个元素地比较数组,如果它们相等,则为每个元素返回 True。但是每次我执行命令时,它都会返回 False 进行第一次比较。另一方面,如果我将两个数组复制粘贴到命令中,它会为两者返回 True,如您在屏幕截图中所见。那么,为什么两者有区别呢?

【问题讨论】:

  • 当您通过硬编码值比较它们时,它们将相等,因为它们以完全相同的方式近似。但是一旦对它们应用一些数学运算,就不再可能检查两个浮点是否相等。
  • 快速示例:onlinegdb.com/B1SO-l_H8
  • 您可以这样做,或者将它们与一个小增量进行比较。获得浮点数的原因是大多数数学运算都需要浮点值,例如平方根、点积、矩阵求逆等等。
  • 通过使用一个小的增量,我的意思是比较两个值相等或只是一个非常小的值。看看这个:docs.scipy.org/doc/numpy/reference/generated/numpy.isclose.html
  • np.allclose,如果您不需要返回掩码。

标签: numpy jupyter-notebook ipython numpy-ndarray


【解决方案1】:

您无法比较浮点数,因为它们只是一个近似值。当您通过硬编码值比较它们时,它们将相等,因为它们以完全相同的方式近似。但是一旦你对它们应用一些数学运算,就不再可能检查两个浮点是否相等。

比如这个

a = 0

for i in range(10):
    a += 1/10

print(a)
print(a == 1)

会给你0.9999999999False,即使 (1/10) * 10 = 1。

要比较浮点值,您需要将两个值与一个小的 delta 值进行比较。换句话说,检查它们是否只是一个很小的值。例如

a = 0

for i in range(10):
    a += 1/10

delta = 0.00000001
print(a)
print(abs(a - 1) < delta)

会给你True

对于 numpy,您可以使用 numpy.isclose 获取掩码,如果您只需要 True 或 False 值,则可以使用 numpyp.allclose

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多