У меня трудное время, чтобы отладить проблему, в которой поплавок nan
в list
и nan
в numpy.array
обрабатываются по-разному, когда они используются в itertools.groupby
:Почему itertools.groupby Сгруппируйте в списках пренебрежимо малых, но не в Numpy массивов
Учитывая следующий список и массив:
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
s сгруппированных:
>>> 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
?
Хм, интересно, что вызвало этот вопрос. :) – Tagc
В чем именно вопрос: почему 'groupby' показал это непоследовательное поведение или как его обойти? И в последнем случае вы хотите, чтобы «нан» сгруппированы или нет? –
Просто, если кого-то интересует, вопрос был задан, когда я попытался выяснить, почему [ответ] (http://stackoverflow.com/a/41722363/5393381) работал, когда применяется к списку, но не при применении к 'np.array'. – MSeifert