【发布时间】:2017-06-03 01:37:25
【问题描述】:
我很难调试list 中的浮点nan 和numpy.array 中的nan 在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)
当我遍历列表时,连续的nans 被分组:
>>> 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'>
但是,如果我使用数组,它会将连续的 nans 放在不同的组中:
>>> 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 怎么可能对nans 进行分组?
【问题讨论】:
-
嗯,我想知道是什么引发了这个问题。 :)
-
这里的问题到底是什么:为什么
groupby表现出这种不一致的行为,或者如何解决它?在后一种情况下,您是否要对nans 进行分组? -
如果其他人感兴趣,当我试图找出为什么 an answer 在应用于列表时有效但在应用到
np.array时无效时,会提示该问题。 -
@tobias_k 我有兴趣解释为什么这些不同。
-
groupby应用于 float dtype 数组可能接近无用,除非将np.isclose用作key。
标签: python arrays list numpy nan