代码之家  ›  专栏  ›  技术社区  ›  Chrispresso

为什么np.all在我使用“is”与“==”进行比较时返回错误的值?

  •  3
  • Chrispresso  · 技术社区  · 6 年前

    所以我在我的代码中发现了一个bug,可以用下面的代码进行复制。基本上我需要检查 np.ndarray 不是0。

    >>> a = np.ones((3,3))
    >>> np.all(a == 0) == False
    True
    

    好吧,完美,所有的价值观 a 是非零的。我知道我也可以 np.all((a == 0) == False) 相反,明确要求与0进行比较,但我一开始没有这样做,这使我意识到在比较 is == False 案例。

    >>> np.all(a == 0) is False
    False
    

    我知道 如果对象指向同一对象,则应进行比较。但这是否意味着我的两个值 实际上不要指向同一个 ? 我可能只是想得太多了。。。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Andy Hayden    6 年前

    返回类型为 numpy.bool_ 而不是 bool :

    In [11]: type(np.all(a == 0))
    Out[11]: numpy.bool_
    
    In [12]: type(False)
    Out[12]: bool
    

    这个 is check断言两个对象指向 same object .