【发布时间】:2015-04-04 21:39:01
【问题描述】:
当您执行以下操作时会出现未来警告:
>>> numpy.asarray([1,2,3,None]) == None
目前返回 False,但我知道在 Numpy 的未来版本中将返回一个包含 [False,False,False,True] 的数组。
正如on the numpy discussion list 所讨论的那样,解决此问题的方法是测试a is None。
让我感到困惑的是in 关键字与一维数组与列表相比的这种行为:
>>> None in [1,2,3,None]
True
>>> None in numpy.asarray([1,2,3,None])
__main__:1: FutureWarning: comparison to 'None' will result in an elementwise
object comparison in the future
False
>>> 1 in numpy.asarray([1,2,3,None])
True
编辑(见 cmets)——实际上有两个不同的问题:
- 为什么这会导致
FutureWarning-None in numpy.asarray(...)的未来行为与现在相比会怎样? - 为什么
in与list的行为不同;我可以在不将其转换为列表或使用for循环的情况下测试我的数组是否包含None?
Numpy 版本是 1.9.1,Python 3.4.1
【问题讨论】:
-
为什么你的数组会包含
None?查看dtype示例的None。那是你要的吗?您是否有可能将None与np.nan混淆? -
我使用的数据可能包含
None。我知道None不是np.nan。我的确切情况比我的示例更复杂,但这与问题并不真正相关。不过,查看dtype确实有效。谢谢。顺便说一句,np.nan in np.asarray([1,2,3,np.nan])也将返回False。所以也许我的问题应该是关于in和一般的 numpy 数组。 -
尽管,如果您从其中包含
None的矩阵中取出一个切片,dtype仍将是object,即使该切片中没有None。 -
@matches
np.nan in np.asarray([1,2,3,np.nan])返回False,因为np.nan != np.nan(有关详细信息,请参阅 here)。在您的数据上下文中,None的值是什么意思?如果您使用None表示缺失数据,使用np.nan会更有意义,或者更好的是,切换到masked arrays。 -
另外,在 numpy 的未来版本中,您的示例
np.array([1, 2, 3, 4]) == None将返回np.array([False ,False, False, False])。新行为将与当前与标量数值进行元素比较的方式一致,例如np.array([1, 2, 3, 4]) == 1返回np.array([True ,False, False, False])