我有這兩個 numpy 陣列
arr1 = np.empty( (3,) , dtype=np.object)
arr1[0] = [1,2]
arr1[1] = [1,2,3]
arr1[2] = None
arr2 = np.empty( (3,) , dtype=np.object)
arr2[0] = np.array([1,2])
arr2[1] = np.array([1,2,3])
arr2[2] = None
為什么,當我檢查內部陣列/串列是否為 None 時,我得到不同的結果,它們的形狀相同
In [28]: arr1 != None
Out[28]: array([ True, True, False])
In [27]: arr2 != None
Out[27]: True
numpy 中檢查 arr2 中的每個元素是否為 None 的方法是什么?
uj5u.com熱心網友回復:
請注意,該行在arr2 != None較新版本的 Numpy 上引發了以下 DeprecationWarning:
Warning (from warnings module):
File "<pyshell#19>", line 1
DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
原因是my_array != my_object呼叫my_array[i] != my_objecteach i,并期望在每個元素處回傳一個布林值。相反,它array([ False, False])作為第一個元素回傳(不僅僅是一個布林值)。
所以本質上,區別在于list != None回傳 False,但numpy_array_of_ints != None回傳一個陣列。元素比較應該只回傳一個布爾陣列。
編輯:查看檔案,元素比較的回傳值是“通常為 bool 型別,除非傳遞 dtype=object”。因此,我們可以這樣做:
>>> np.not_equal(arr1, None, dtype=object)
array([True, True, False], dtype=object)
>>> np.not_equal(arr2, None, dtype=object)
array([array([ True, True]), array([ True, True, True]), False],
dtype=object)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394730.html
