我有两个numpy数组
arr1 = np.empty( (3,) , dtype=np.object)
arr1[0] = [1,2]
arr1[1] = [1,2,3]
arr1[2] = Nonearr2 = 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中的每个元素都是空的?
发布于 2021-12-26 07:43:22
请注意,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为每个i调用my_array[i] != my_object,并期望在每个元素上得到一个布尔值。相反,它将返回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://stackoverflow.com/questions/70484816
复制相似问题