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,但这看起来不是一个干净的解决方案.有任何想法吗?
numpy ×1