“为什么我得到一个无效值…”已经讨论过几次了。这是另一个我还不太理解的变体——这就是我打开这条线索的原因:
(1) 在
y = np.nan
(~np.isnan(y)) & (y > 5.)
我得到了正确的结果,没有抛出错误。
(2) 然而,在
y = np.array([np.isnan, 6.])
(~np.isnan(y)) & (y > 5.)
显示“较大值中遇到无效值”警告。
这意味着短路(
Python reference
)如果此表达式与numpy数组一起使用,则布尔and表达式不起作用。
在堆栈溢出上挖掘一点(例如。
ref
)在其他地方,数组表达式似乎写为
np.logical_and.reduce([~np.isnan(y), y>5.])
这意味着在组合这两个表达式之前,首先对所有元素求值(实际上,这会产生相同的警告)。有人能确认这是怎么回事吗?除了在所有数组元素上循环外,还有人能解决这个问题吗?
我在其中使用此表达式的上下文是,如果数组中的其他值超过阈值,则将其设置为nan,即实际代码具有以下内容:
y[(~np.isnan(y)) & (y > 5.)] = np.nan