首页 > 解决方案 > 即使数据类型在逻辑上正确,也无法检测列表中的 nan 值

问题描述

我在使用 pytorch 从自定义数据集创建的列表中调用了列表。

In [1]: sample[1][1]
Out[1]: [0.7, nan, nan, nan, nan]

我想检查列表中是否有 nan 值。我试过了

In [2]: np.nan in sample[1][1]
Out[2]: False

但它返回一个 False 输出。检查其中一个元素,我发现:

In [3]: sample[1][1][4] == np.nan
Out[3]: False

据说,它一定是真的,因为检查它的类型会提示我:

In [4]: type(sample[1][1][4])
Out[4]: numpy.float64

需要帮助看看我哪里出错了。我希望该列表返回 True,因为它包含一个 nan。任何线索都会有所帮助

标签: pythonnumpy

解决方案


您想为此使用np.isnan,如您在此处看到的:

In [5]: np.nan==np.nan
Out[5]: False

In [6]: np.isnan(np.nan)
Out[6]: True

原因有点深奥,但重点是使用 np.isnan 进行测试。对于您的特定情况,您可以这样做

any([np.isnan(i) for i in sample[1][1]])

推荐阅读