【问题标题】:creating a boolean array which compares numpy elements to None创建一个布尔数组,将 numpy 元素与 None 进行比较
【发布时间】:2014-11-20 20:26:35
【问题描述】:

我有一个 dtype=object 的 numpy 数组,我想创建一个布尔数组来标识哪些元素是 None。但看起来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])

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

【问题讨论】:

  • 肯定不会期望 ndarrays 对 None 有不同的行为...很好!
  • ...特别是因为 NumPy 文档中的这句话:“每个算术运算 (+, -, *, /, //, %, divmod(), **或 pow()、>、&、^、|、~) 和比较(==、、=、!=)等价于相应的通用函数(或 ufunc短)在 Numpy 中。” 我只能假设 np.equal== 的 ufunc。

标签: python arrays python-2.7 numpy


【解决方案1】:

你可以使用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)

【讨论】:

  • 这绝对是一个很好的解决方法,但你知道为什么它不适用于None吗? numpy 文档说 == 应该匹配它的 ufunc 等价物,我想 equal 是匹配的 ufunc。
  • 太棒了...我想这解决了原因(这是一个错误)。谢谢!
  • == None 的比较应该在当前版本中给出FutureWarning: comparison to 'None' will result in an elementwise object comparison in the future.None 是发生这种情况的唯一例外,但会得到解决。
猜你喜欢
  • 2021-06-24
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2021-02-05
相关资源
最近更新 更多