Python中的零对数

Posted

技术标签:

【中文标题】Python中的零对数【英文标题】:Logarithm of zero in Python 【发布时间】:2017-08-16 06:03:53 【问题描述】:

我正在尝试在 Python 中做零的对数。

from math import log
log(0)

这给我带来了一个例外。

ValueError: math domain error

我知道负数的 log 在数学上是未定义的,这就是 Python 的 log 可以引发 ValueError 异常的原因。但是为什么在用零值调用它时也会引发异常?它应该返回一个-inf 值,并且我已经看到可以用 Python (as in here) 表示无限数。

我可以在不亲自处理的情况下处理这个问题吗?我的意思是个人在做这样的事情时。

from math import log, inf
foo = ... # Random value.
if foo != 0: return log(foo)
else: return -inf

【问题讨论】:

log(foo) if foo > 0 else -inf 看起来不错 它应该返回一个-inf 不,它不应该。 log(0) 不等于 -inf。它的极限“接近于零”趋向于 -infinity,但值本身是未定义的。 @not_a_robot 也会将负值转换为-inf,即使有限制也是不对的 【参考方案1】:

其实 Python 并没有错。零的对数也是未定义的,这是因为它是一个限制,它是-inf,只从右边,而不是从左边:

所以,不,你必须自己处理这个问题。这是错误的,但你可以这样做。像这样的东西:log(x) if x != 0 else -inf.

【讨论】:

处理负数,它们也会返回-inf 我认为 log(x) if x !=0 else -inf 抓住了可以容纳 -inf 值的正确想法。它仍然(正确地)引发了否定 x 的异常。

以上是关于Python中的零对数的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中处理 pandas DataFrames 列划分中的零

python中的对数y轴箱

使用python中的对数轴缩放和拟合对数正态分布

用 nan 替换 NumPy 整数数组中的零

R中的似然比检验用于假设检验

如何消除由于 scipy/numpy fft 中的零填充而产生的边界效应?