當使用運算子比較布林值陣列的numpy.all() 時,我得到了一個意外的輸出。但是,我在使用運算子時得到了預期的結果 ( ) 。這種比較失敗的可能原因是什么?TrueisFalseTrue==
下面附上示例代碼。
In[2]: import sys
In[3]: print(sys.version)
3.9.5
In[4]: import numpy as np
In[5]: np.__version__
'1.20.3'
In[6]: bool1 = True
In[7]: bool1 is True
True
In[8]: bool1 == True
True
In[9]: bool_arr = np.array([True, True, True, True])
In[10]: bool_arr.all()
True
In[11]: bool_arr.all() == True
True
In[12]: bool_arr.all() is True
False
從上面的代碼可以看出,在輸入 12 中,預期結果為 ,True但實際結果為False。
我在 Ubuntu 中使用 pyenv 作為 python 的環境。
編輯:正如評論中所建議的,這不是使用 python 的最佳實踐。但是,我很想知道這次失敗的根本原因。
uj5u.com熱心網友回復:
如果您檢查 的型別bool_arr.all(),答案將立即顯而易見:
>>> bool_arr.all()
<class 'numpy.bool_'>
np.all回傳一個 numpy 的實體bool_,它與 python 的內置bool型別是不同的類。不同型別的實體不能是同一個物件,這is就是告訴你的。
檢查真實性的正確方法是讓 pythonbool為您包裝一個運算式,例如,在if像if bool_arr.all():.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341072.html
