【问题标题】:Why does order matter in Logical and/or operation involving np.NaN in python?为什么在 python 中涉及 np.NaN 的逻辑和/或操作中的顺序很重要?
【发布时间】:2018-11-14 23:53:20
【问题描述】:

np.NaN 的布尔值为 True。那么为什么和/或操作在 python 中表现得如此随机。

bool(np.nan) == True

如果True or np.nan 的计算结果为True,那么为什么np.nan or True 的计算结果为nan?而这对于和操作完全相反:

True and np.nannannp.nan and TrueTrue

【问题讨论】:

  • 我无法理解您的示例和问题本身。无论如何,由于运算符优先级x and y == z 等价于x and (y == z)。因此显然与y and x == z不一样。
  • 查看此 SO 帖子...stackoverflow.com/q/43925797/6361531
  • 除了 Jacques 的解释外,这里称为short circuiting。例如尝试2 or 1/0,这将返回2,因为第一个操作数是Trueish,它的值为2。但如果你改变顺序,它会引发ZeroDivisionError。

标签: python numpy null logical-operators


【解决方案1】:

这是由于解释器使用 and/or 评估表达式的方式:

  • or 表达式:

    如果第一个操作数是True 或等价于True,则不计算第二个操作数并返回第一个操作数的值。

    如果第一个操作数是False 或等价于False,则计算并返回第二个操作数

    例子:

    True or np.nanbool(True)True,因此返回True

    np.nan or Truebool(np.nan)True,因此返回np.nan

    False or np.nanbool(False)False,因此返回np.nan

  • and 表达式:

    如果第一个操作数是False 或等价于False,则不计算第二个操作数并返回第一个操作数的值

    如果第一个操作数是True 或等价于True,则计算并返回第二个操作数

    例子:

    True and np.nanbool(True)True,因此返回np.nan

    np.nan and Truebool(np.nan)True,因此返回True

    False and np.nanbool(False)False,因此返回False

【讨论】:

  • 但是为什么有时 np.NaN 被替换为 True,而有时它仍然是 np.NaN?
  • 不替换为True:根据第一个操作数是否为真,返回第一个或第二个操作数。
猜你喜欢
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多