gpt4 book ai didi

python - 为什么 collections.Counter 将 numpy.nan 视为平等的?

转载 作者:太空狗 更新时间:2023-10-29 21:29:08 24 4
gpt4 key购买 nike

我对以下行为感到惊讶:

>>> import numpy as np
>>> from collections import Counter
>>> my_list = [1,2,2, np.nan, np.nan]
>>> Counter(my_list)
Counter({nan: 2, 2: 2, 1: 1}) # Counter treats np.nan as equal and
# tells me that I have two of them
>>> np.nan == np.nan # However, np.nan's are not equal
False

这是怎么回事?

当我使用 float('nan') 而不是 np.nan 时,我得到了预期的行为:

>>> my_list = [1,2,2, float('nan'), float('nan')]
>>> Counter(my_list)
Counter({2: 2, nan: 1, 1: 1, nan: 1}) # two different nan's
>>> float('nan') == float('nan')
False

我正在使用 python 2.7.3numpy 1.8.1

编辑:

如果我这样做:

>>> a = 300
>>> b = 300
>>> a is b
False
>>> Counter([a, b])
Counter({300: 2})

因此,Counter 或任何 python dict 认为两个对象 XY 不相同,如果:

X == Y -> False

and

X is Y -> False

正确吗?

最佳答案

这不是关于 numpy.nan vs. float("nan"),而是你有两个独立的 float nan。

>>> np.nan is np.nan
True
>>> float("nan") is float("nan")
False

等等

>>> Counter([1,2,2, np.nan, np.nan])
Counter({nan: 2, 2: 2, 1: 1})
>>> Counter([1,2,2, float("nan"), float("nan")])
Counter({2: 2, nan: 1, 1: 1, nan: 1})

但是

>>> f = float("nan")
>>> Counter([1,2,2, f, f])
Counter({nan: 2, 2: 2, 1: 1})

关于python - 为什么 collections.Counter 将 numpy.nan 视为平等的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22673201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com