numpy:FutureWarning:使用`in`语句

时间:2016-05-21 21:05:58

标签: python numpy comparison warnings future

我正在通过硬件从给定的库中读取。我可能会得到一个numpy数组,或者 - 如果硬件出错 - 一个None

我想检查None并跳过包含它们的事件:

for event in hardware.events():
    val1 = event.get_first_value()
    val2 = event.get_second_value()
    #potentially more of the above

    if None in (val1, val2):
        continue

我一直认为这是进行此测试最干净的方法。特别是,当有更多值要比较时。但是,我刚刚得到了这个FutureWarning:

FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.

我理解这是来自change numpy如何处理相等(==)比较。我也理解它背后的原因......

解决方案显然是这样做的:

    if val1 is None or val2 is None:
        continue
然而,当我将vali的列表扩展到i = 2之外时,这将会非常快速地看起来很丑...

  • 因此,我想知道这个更改是否实际上适用于我的示例中的in语句?我会看到测试结果错误吗?据我所知,in无论如何都会测试每个元素的相等性(==)和身份(is)。另外,numpy的新元素检查会引入性能变化吗?

  • 如果它实际上改变了结果,是否有另一种简洁的方法来执行相同的测试? (即使我的原始测试永远不会失败,只是为了摆脱FutureWarning消息,对此的答案可能会有用...)

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

import numpy as np

# Some fake data
vals = (np.zeros(5), None)

# Test whether data contains None
if any(x is None for x in vals):
    # Do stuff