你能帮我理解以下内容吗:
import numpy as np
sorted([3,2,np.nan, -1])
output:
[-1, 2, 3, nan]
import numpy as np
sorted([1,2,np.nan, -1])
output:
[1, 2, nan, -1]
这几乎就像我需要一个在 NaN 之前触发的排序,否则它会返回相同的列表
有两件事需要考虑。首先,
sorted()
使用<
或__lt__()
进行比较。对于 nan
值,与任何数字进行比较的结果始终为 False。
>>> 1 > np.nan
False
>>> 1 < np.nan
False
这会导致比较错误,这里有一个例子可以更好地理解它:
>>> max(np.nan,1)
nan
>>> max(1,np.nan)
1
正如你所看到的,当我们调用
max()
函数时,答案也不同。因为比较的结果总是False
并且它有这个简单的逻辑:
max(a,b):
if a<b:
return b
else :
return a
这清楚地说明了为什么
max()
函数无法返回正确的最大值,并且它返回第一个参数作为最大值。
在排序算法中使用比较运算符时,也会出现相同的逻辑。它会影响 timsort 算法中的比较。如果你想更多地研究这个问题,这个 github 问题也许有帮助。