如何在 Python 中使用 Numpy log1p?

AskPython中的一系列文章详细介绍了Python numpy库中可用的各种函数,是时候向对数问好了!在了解 Python 中的函数之前,我们先尝试了解一下什么是对数以及为什么要使用对数。

假设我们有一个数字“10”,想要计算它的“3”次方。结果将是“1,000”。对数是表达此运算的另一种方法。为获得所需数字而对某个数字进行幂的操作称为“对数”

另请阅读:Numpy log10 – 按元素返回输入数组的以 10 为底的对数。

在上面的例子中,10 的对数得到 1,000 就是“3”!现在,我们将把注意力转向本文的范围——log1p ()函数。该函数返回输入数字加一后的自然对数。

让我们首先使用以下代码导入numpy库。

import numpy as np

此后,我们将 通过以下各节进一步探讨log1p( ) 函数。

  • log1p( ) 函数的语法
  • 为什么使用log1p(x)而不是log(x+1)
  • 在 N 维数组上使用log1p( )

log1p( ) 函数的语法

log1p( )函数的工作原理与log( )函数类似,但唯一的区别是在计算结果之前,输入的数字会加“1”。以下是log1p( )函数的语法,其中包含其运行所需的强制输入和可选输入。

numpy. log1p(x, out=None, *, where=True, dtype=None)

在哪里,

  • x –  N 维数组或标量
  • out –默认情况下设置为none的可选构造,但可用于将结果存储在与输出长度相同的所需数组中
  • * kwargs 或关键字参数,它是一个可选构造,用于将参数的关键字可变长度传递给函数
  • 其中 –一个可选构造,用于在设置为True (默认设置)时计算给定位置的通用函数 (ufunc),或在设置为False时不计算
  • dtype –一个可选结构,用于指定正在使用的数据类型

为什么使用log1p(x)而不是log(x+1)

当使用已经可用的log()函数可以完成相同的操作时,人们可能为什么要费心构建一个特定的函数来将“1”添加到输入数字中。为了找出这背后的原因,让我们比较这两个函数的结果,看看是否存在任何可观察到的差异。

x = 10
np.log(x+1)
np.log1p(x)

以下是上述代码的结果。

比较 x=10 的结果

结果甚至到小数点最后一位都相同!但是,如果我们减少“x”的数量并将其放入相同的函数中会怎么样?这些能够返回相同的结果吗?让我们来看看吧!

x = 1e-10
np.log(x+1)
np.log1p(x)
比较 x=1e-10 的结果

现在的结果不一样了,是吗?(邪恶的坏笑!)

这背后的主要原因是log1p(x)函数似乎可以准确地工作,即使对于小数点后几位数开始的较小数字也是如此。但是,对于log(x+1)函数却不能这样说,因为结果会由于舍入误差而产生偏移。因此,当涉及较小数量级的数字时,使用log1p( )返回准确的结果。


在 N 维数组上使用log1p( )

在本节中,我们尝试仅在 N 维数组的选定位置部署log1p( )函数。

ar1 = np.array([[1, 8, 0.09],
               [5.007, 33, 2]])
np.log1p(ar1, where = [[False, True, True],
                      [True, True, False]])
在 N 维数组上使用log1p ( )

由于使用了where选项,可以看出仅在给定为True 的位置返回结果,其他位置的结果为零。


结论

现在我们已经到了本文的结尾,希望它已经详细说明了如何使用 numpy 库中的log1p( ) 函数 这是另一篇文章,详细介绍了Python 中numpy 库中的expm1( )函数 的用法AskPython中还有许多其他有趣且内容丰富的文章,可能对那些希望提高 Python 水平的人有很大帮助。 马泽尔托夫