Мне сложно отлаживать проблему, при которой float nan
в list
и nan
в numpy.array
обрабатывается по-разному, если они используются в itertools.groupby
:
Учитывая следующий список и массив:
from itertools import groupby
import numpy as np
lst = [np.nan, np.nan, np.nan, 0.16, 1, 0.16, 0.9999, 0.0001, 0.16, 0.101, np.nan, 0.16]
arr = np.array(lst)
Когда я перебираю список, смежные nan
сгруппированы:
>>> for key, group in groupby(lst):
... if np.isnan(key):
... print(key, list(group), type(key))
nan [nan, nan, nan] <class 'float'>
nan [nan] <class 'float'>
Однако, если я использую массив, он помещает последовательный nan
в разные группы:
>>> for key, group in groupby(arr):
... if np.isnan(key):
... print(key, list(group), type(key))
nan [nan] <class 'numpy.float64'>
nan [nan] <class 'numpy.float64'>
nan [nan] <class 'numpy.float64'>
nan [nan] <class 'numpy.float64'>
Даже если я преобразую массив в список:
>>> for key, group in groupby(arr.tolist()):
... if np.isnan(key):
... print(key, list(group), type(key))
nan [nan] <class 'float'>
nan [nan] <class 'float'>
nan [nan] <class 'float'>
nan [nan] <class 'float'>
Я использую:
numpy 1.11.3
python 3.5
Я знаю, что обычно nan != nan
, так почему эти операции дают разные результаты? И как возможно, что groupby
может группировать nan
вообще?