from numpy import *
m = array([[1,0],
[2,3]])
Run Code Online (Sandbox Code Playgroud)
我想计算元素log2(m),但仅限于m不是0的地方.在那些地方,我希望得到0作为结果.
我现在正在反对:
RuntimeWarning: divide by zero encountered in log2
Run Code Online (Sandbox Code Playgroud)
尝试1:使用 where
res = where(m != 0, log2(m), 0)
Run Code Online (Sandbox Code Playgroud)
这会计算出正确的结果,但我仍然记录了RuntimeWarning: divide by zero encountered in log2.看起来(在语法上它很明显)numpy仍然log2(m)在完整矩阵上进行计算,然后才where选择要保留的值.
我想避免这个警告.
尝试2:使用面具
from numpy import ma
res = ma.filled(log2(ma.masked_equal(m, 0)), 0)
Run Code Online (Sandbox Code Playgroud)
肯定掩盖零会阻止log2它们被应用到它们身上,不是吗?不幸的是:我们仍然得到RuntimeWarning: divide by zero encountered in log2.
即使矩阵被掩盖,log2似乎仍然应用于每个元素.
如何在不获得除零警告的情况下有效地计算numpy数组的逐元素日志?
seterr,但这看起来不是一个干净的解决方案.有任何想法吗?
以下错误是什么:
Warning: overflow encountered in exp
Run Code Online (Sandbox Code Playgroud)
在使用Python的scipy/numpy中通常意味着什么?我正在计算日志形式的比率,即log(a)+ log(b),然后使用exp,并使用与textsumexp的和,得到结果的指数,如下所示:
c = log(a) + log(b)
c = c - logsumexp(c)
Run Code Online (Sandbox Code Playgroud)
数组b中的某些值有意设置为0.它们的日志将为-Inf.
这警告的原因是什么?谢谢.
我试图避免RuntimeWarning: invalid value encountered in divide在NumPy中发出警告.
我以为我能做到:
import numpy as np
A=np.array([0.0])
print A.dtype
with np.errstate(divide='ignore'):
B=A/A
print B
Run Code Online (Sandbox Code Playgroud)
但这给了:
float64
./t.py:9: RuntimeWarning: invalid value encountered in divide
B=A/A
[ nan]
Run Code Online (Sandbox Code Playgroud)
如果我B=A/A用np.float64(1.0) / 0.0它替换它没有警告.
我在代码中遇到了"运行时警告:在exp中遇到溢出...".如何在此警告中使pyCharm中断?它目前已超越它.