Python 即使数据类型在逻辑上正确,也无法检测列表中的nan值

Python 即使数据类型在逻辑上正确,也无法检测列表中的nan值,python,numpy,Python,Numpy,我在使用pytorch从自定义数据集创建的列表中调用了list 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 但它返回了一个错误的输出。通过检查其中一个元素,我发现: In [3]: sample[1][1][4] == np.nan Out[3]: False 假设它一定是真的,因为检查它的类型会

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

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
但它返回了一个错误的输出。通过检查其中一个元素,我发现:

In [3]: sample[1][1][4] == np.nan
Out[3]: False
假设它一定是真的,因为检查它的类型会提示我:

In [4]: type(sample[1][1][4])
Out[4]: numpy.float64
我需要帮忙看看我哪里出错了。我希望该列表返回True,因为它包含一个nan。任何潜在客户都将帮助您实现这一目标,如您在此处所见:

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]])
您希望使用它,如您在此处所见:

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]])
从我的观点来看:

In [1]: sample[1][1]
Out[1]: [0.7, nan, nan, nan, nan]
我尝试了一个变通办法。多亏了np.isnan的理念。在数组中添加布尔值,如果其大于0,则必须具有nan

In [2]: np.isnan(sample[1][1])
Out[2]: array([False, True, True, True, True])
从我的观点来看:

In [1]: sample[1][1]
Out[1]: [0.7, nan, nan, nan, nan]
我尝试了一个变通办法。多亏了np.isnan的理念。在数组中添加布尔值,如果其大于0,则必须具有nan

In [2]: np.isnan(sample[1][1])
Out[2]: array([False, True, True, True, True])

这是一个奇怪的问题,与示例[1][1]对象的in运算符的实现有关

解决方案是强制转换到一个列表:

In [5]: np.nan in list(sample[1][1])
Out[5]: True

编辑:这是一种快速而肮脏的方式。此解决方案依赖于np.nan,即np.nan==True。然而,这并不能保证在所有情况下都是正确的。因此,最好坚持使用包含np.isnanx的构造,如其他几个答案中给出的构造。

这是一个奇怪的问题,与示例[1][1]对象的in运算符的实现有关

解决方案是强制转换到一个列表:

In [5]: np.nan in list(sample[1][1])
Out[5]: True
编辑:这是一种快速而肮脏的方式。此解决方案依赖于np.nan,即np.nan==True。然而,这并不能保证在所有情况下都是正确的。因此,最好坚持使用包含np.isnanx的构造,如其他几个答案中给出的构造。

您应该使用np.isnansampleWhat's type of sample[1][1]?。列表不会出现这种情况。您应该使用np.isnansampleWhat's type of sample[1][1]?。这不会发生在列表中。