2014-09-25 41 views
9

我有一个dtype = object的numpy数组,我想创建一个布尔数组来标识哪些元素是None。但它看起来像None表现不同......创建一个布尔数组,它将numpy元素与None进行比较

a = np.array(['Duck','Duck','Duck','Goose',None,1,2,3,1,3,None,4]) 
print a == 'Duck' 
print a == 3 
print a == None 

导致

[ True True True False False False False False False False False False] 
[False False False False False False False True False True False False] 
False 

是否有一个“numpythonic”的方式来获得None元素的布尔数组?我可以使用

np.array([x is None for x in a]) 

但这似乎应该有更好的方法。

+0

我绝对* *怎么也没有想到ndarrays表现不同的'None' ...福气! – SethMMorton 2014-09-25 22:38:52

+0

...尤其是因为这个引用来自NumPy文档:*“每个算术运算(+, - ,*,/,//,%,divmod(),**或pow() ,^,|,〜)和比较(==,<, >,<=, > =,!=)等同于Numpy中相应的通用函数(或简称ufunc)。“*我只能假设'np.equal'是'=='的ufunc。 – SethMMorton 2014-09-25 22:44:35

回答

10

您可以使用numpy.equal

In [20]: np.equal(a, None) 
Out[20]: 
array([False, False, False, False, True, False, False, False, False, 
     False, True, False], dtype=bool) 
+0

这绝对是一个很好的解决方法,但是你知道为什么它不适用于'None'吗? numpy文档说'=='应该与ufunc相同,我想'equal'是匹配的ufunc。 – SethMMorton 2014-09-25 22:46:37

+2

@SethMMorton在Github上找到一个相关的票证:['== None'似乎对数组是'None'而不是返回元素智能比较#3759](https://github.com/numpy/numpy/issues/3759) – 2014-09-25 22:49:47

+0

太棒了......我想这解决了为什么(这是一个错误)。谢谢! – SethMMorton 2014-09-25 22:57:02

相关问题