想知道python中的邏輯。當在 numpy 陣列上使用 any() 或 all() 并且使用 is False/True 時,我總是得到 False,但是當使用“==”時,我得到了我期望的答案。所以
import numpy as np
a = np.array([True,False,True])
a.any() is False
>False
a.any() is True
>False
但這項作業按預期進行
a.any() == True
>True
a.any() == False
>False
uj5u.com熱心網友回復:
該is如果物件是相同的(具有相同的運算子比較id)。該==操作比較兩個值。可以看到值是一樣的(True),但是id是不同的。看:
In [4]: id(True)
Out[4]: 140734689232720
In [5]: id(a.any())
Out[5]: 140734684830488
所以你看到的是兩個不同的物件,它們具有相似的人類可讀的列印值“True”。正如 AKX 所指出的,這兩個物件的型別不同:Trueis boolbut a.any()is numpy.bool_。
關于將值與布林值進行比較的注意事項
作為旁注,您通常不想與布林值進行比較is,因此沒有
if a.any() is False:
# do something
這是一個完美的例子,為什么不呢。一般來說,您對這些值是否為真感興趣,而不是True。此外,即使使用==運算子,也沒有必要與布林值進行比較:
if a.any() == False:
# do something
相反,pythonic 的方式是只寫
if not a.any():
# do something
uj5u.com熱心網友回復:
Numpy 操作回傳 Numpy 型別。
>>> import numpy as np
>>> a = np.array([True,False,True])
>>> a.any()
True
>>> type(a.any())
<class 'numpy.bool_'>
永遠不要is用于比較(除非你知道你真的需要它,這種情況很少見)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368022.html
