理解 NaN 的排序 - Python

问题描述 投票:0回答:1

你能帮我理解以下内容吗:

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 之前触发的排序,否则它会返回相同的列表

python numpy sorting nan
1个回答
0
投票

有两件事需要考虑。首先,

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 问题也许有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.