Python 当存在nan值时,为什么此列表与数组求值返回false?
考虑一下这个简单的评估:Python 当存在nan值时,为什么此列表与数组求值返回false?,python,numpy,Python,Numpy,考虑一下这个简单的评估: import numpy as np aa = np.array([[np.nan, np.nan], [1.64, 0.0784]]) bb = [[np.nan, np.nan], [1.64, 0.0784]] np.all(aa == bb) 这将返回False,即使aa数组等于bb列表。如果我对aa,bb中的每个元素尝试此操作,我会得到: np.all(aa[0] == bb[0]) False np.all(aa[1] == bb[1]) True
import numpy as np
aa = np.array([[np.nan, np.nan], [1.64, 0.0784]])
bb = [[np.nan, np.nan], [1.64, 0.0784]]
np.all(aa == bb)
这将返回False
,即使aa
数组等于bb
列表。如果我对aa,bb中的每个元素尝试此操作,我会得到:
np.all(aa[0] == bb[0])
False
np.all(aa[1] == bb[1])
True
这意味着这里的问题是nan
值。为什么会发生这种情况?根据定义,nan
与任何东西(使用内置操作数)相比,都返回False
。特别是,np.nan==np.nan
返回False
但是,请注意,=
被定义为==
的否定,因此我们得到:
>>> import numpy as np
>>> np.nan == np.nan
False
>>> np.nan != np.nan
True
您可以直接使用
>>> np.isnan(np.nan)
True
根据定义,nan
与任何东西相比(使用内置操作数)返回False
。特别是,np.nan==np.nan
返回False
但是,请注意,=
被定义为==
的否定,因此我们得到:
>>> import numpy as np
>>> np.nan == np.nan
False
>>> np.nan != np.nan
True
您可以直接使用
>>> np.isnan(np.nan)
True
原因:原因: