相关疑难解决方法(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万
查看次数

Python中scipy/numpy中的exp溢出?

以下错误是什么:

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.

这警告的原因是什么?谢谢.

python numpy scipy

23
推荐指数
2
解决办法
7万
查看次数

如何在NumPy中避免"RuntimeWarning:在div中遇到无效值"?

我试图避免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/Anp.float64(1.0) / 0.0它替换它没有警告.

python numpy

18
推荐指数
1
解决办法
2万
查看次数

如何让PyCharm在运行时警告中打破?

我在代码中遇到了"运行时警告:在exp中遇到溢出...".如何在此警告中使pyCharm中断?它目前已超越它.

pycharm

12
推荐指数
2
解决办法
3132
查看次数

标签 统计

numpy ×3

python ×2

pycharm ×1

scipy ×1