【发布时间】:2018-04-30 01:43:35
【问题描述】:
“为什么我得到一个无效值...”这个问题已经讨论过几次了。这是另一个我还不太了解的变体 - 这就是我打开这个帖子的原因:
(1) 在
y = np.nan
(~np.isnan(y)) & (y > 5.)
我得到了正确的结果并且没有抛出错误。
(2) 然而,在
y = np.array([np.isnan, 6.])
(~np.isnan(y)) & (y > 5.)
显示“在更大的值中遇到无效值”警告。
这意味着如果将此表达式与 numpy 数组一起使用,布尔和表达式中的短路 (Python reference) 将不起作用。
在stackoverflow(例如ref)和其他地方挖掘了一下,似乎在引擎盖下数组表达式被写成
np.logical_and.reduce([~np.isnan(y), y>5.])
这意味着两个表达式在组合之前首先针对所有元素进行评估(实际上,这会产生相同的警告)。有人可以确认这是正在发生的事情吗?除了循环遍历所有数组元素之外,还有没有人可以解决这个问题?
我使用这个表达式的上下文是如果数组中的附加值超过阈值,则将它们设置为 nan,即实际代码具有类似的东西
y[(~np.isnan(y)) & (y > 5.)] = np.nan
【问题讨论】:
-
y = np.array([np.isnan, 6.])应该是y = np.array([np.nan, 6.])吗? -
标量 python 和短路。 Numpy & 没有。
标签: python numpy boolean-logic short-circuiting