【发布时间】:2018-04-10 17:52:21
【问题描述】:
使用python 2.7,scipy 1.0.0-3
显然我对 numpy where 函数应该如何运行或在其运行中存在已知错误存在误解。我希望有人能告诉我哪个并解释一种解决方法来抑制我试图避免的烦人的警告。当我使用 pandas Series where() 时,我得到了相同的行为。
为了简单起见,我将使用一个 numpy 数组作为示例。假设我想在数组上应用 np.log(),并且只有在条件下,值才是有效输入,即 myArray>0.0。对于不应应用此函数的值,我想将输出标志设置为 -999.9:
myArray = np.array([1.0, 0.75, 0.5, 0.25, 0.0])
np.where(myArray>0.0, np.log(myArray), -999.9)
我希望 numpy.where() 不会抱怨数组中的 0.0 值,因为那里的条件是 False,但它确实如此,而且它似乎实际上是针对该 False 条件执行的:
-c:2: RuntimeWarning: divide by zero encountered in log
array([ 0.00000000e+00, -2.87682072e-01, -6.93147181e-01,
-1.38629436e+00, -9.99900000e+02])
如果给定 x 和 y 并且输入数组是一维数组,则等效于: [xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
我不同意这种说法,因为
[np.log(val) if val>0.0 else -999.9 for val in myArray]
根本不提供警告:
[0.0, -0.2876820724517809, -0.69314718055994529, -1.3862943611198906, -999.9]
那么,这是一个已知的错误吗?我不想抑制整个代码的警告。
【问题讨论】: