import numpy as npmainList = []numpyArray0 = np.array([1,2,3])numpyArray1 = np.array([4,5,6])mainList.append(numpyArray0)mainList.append(numpyArray1)print("numpyArray0 in mainList:")try: print(numpyArray0 in mainList)except ValueError: print("ValueError")print("numpyArray1 in mainList:")try: print(numpyArray1 in mainList)except ValueError: print("ValueError")print("mainList in numpyArray0:")try: print(mainList in numpyArray0)except ValueError: print("ValueError")print("mainList in numpyArray1:")try: print(mainList in numpyArray1)except ValueError: print("ValueError")print(numpyArray1 in mainList)所以我上面的代碼基本上是在一個普通的python列表(mainList)內創建2個numpy數組,然后檢查這些2個數組是否在列表內。代碼應該輸出:numpyArray0 in mainList:TruenumpyArray1 in mainList:**True**mainList in numpyArray0:TruemainList in numpyArray1:True**True**但不是輸出上述內容,而是輸出以下內容:numpyArray0 in mainList:TruenumpyArray1 in mainList:ValueErrormainList in numpyArray0:TruemainList in numpyArray1:TrueTraceback (most recent call last): File "/home/user/Documents/pythonCode/temp.py", line 31, in <module> print(numpyArray1 in mainList)ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()我做錯了什么嗎?請注意,我在運行代碼之前嘗試更新 python、numpy 和我的操作系統(debian)。
3 回答
繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
numpyArray0 in mainList調用list.__contains__。列表的__contains__方法調用列表的PyObject_RichCompareBool每個元素來檢查元素是否相等。碰巧的是,首先PyObject_RichCompareBool檢查身份相等性,然后進行全面比較。
numpyArray0 is mainList[0]返回True,因此永遠不會進行完全比較。如果完成了完全比較,numpy則會引發,ValueError因為numpy數組不能被解釋為布爾值。
numpyArray1 in mainList也顯示了這一點(因為numpyArray1vs 的身份比較失敗了mainList[0]。
寶慕林4294392
TA貢獻2021條經驗 獲得超8個贊
這里的要點:
>>> numpyArray1 in mainList
....
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
這將工作:
>>> any([list(numpyArray1) == list(litem) for litem in mainList])
True
添加回答
舉報
0/150
提交
取消
