【发布时间】:2020-05-20 21:03:32
【问题描述】:
似乎np.where 函数首先评估所有可能的结果,然后再评估条件。这意味着,在我的例子中,它将计算 -5、-4、-3、-2、-1 的平方根,即使它以后不会使用。
我的代码运行正常。但我的问题是警告。我避免使用循环来评估每个元素,因为它的运行速度比np.where 慢得多。
所以,我在这里问
- 有什么方法可以让
np.where首先评估条件吗? - 我可以只关闭这个特定的警告吗?怎么样?
- 如果您有更好的建议,另一种更好的方法。
这里只是一个简短的示例代码,对应于我的真实代码,它是巨大的。但本质上也有同样的问题。
输入:
import numpy as np
c=np.arange(10)-5
d=np.where(c>=0, np.sqrt(c) ,c )
输出:
RuntimeWarning: invalid value encountered in sqrt
d=np.where(c>=0,np.sqrt(c),c)
【问题讨论】:
-
根据 numpy documentation,声明
d=np.where(c>=0, np.sqrt(c) ,c )等价于[sqcv if cond else cv for (cond, sqcv, cv) in zip(c>=0, np.sqrt(c), c)]。换句话说,无论c>=0条件如何,都会评估术语np.sqrt(c)。