相关疑难解决方法(0)

numpy:采取log(矩阵)时有效避免0

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,但这看起来不是一个干净的解决方案.
  • 并确保双循环将帮助特别处理为0,但是失败numpy的效率.

有任何想法吗?

numpy

28
推荐指数
4
解决办法
2万
查看次数

标签 统计

numpy ×1