你如何在 Python 中使用 numpy 处理自然日志(例如“ln()”)?

Posted

技术标签:

【中文标题】你如何在 Python 中使用 numpy 处理自然日志(例如“ln()”)?【英文标题】:How do you do natural logs (e.g. "ln()") with numpy in Python? 【发布时间】:2012-05-22 12:20:18 【问题描述】:

使用 numpy,我该怎么做:

ln(x)

是否等同于:

np.log(x)

对于这样一个看似微不足道的问题,我深表歉意,但我对logln 之间区别的理解是ln 是logspace e?

【问题讨论】:

【参考方案1】:

正确,np.log(x)x 的自然对数(基础 e 对数)。

对于其他基,请记住对数定律:log-b(x) = log-k(x) / log-k(b) 其中log-b 是某个任意基b 中的日志,log-k 是基k 中的日志,例如

这里 k = e

l = np.log(x) / np.log(100)

l 是 x 的 log-base-100

【讨论】:

精度损失怎么办?【参考方案2】:

np.logln,而 np.log10 是您的标准以 10 为底的对数。

【讨论】:

对于那些想知道 np 是什么的人,比如我自己 "import numpy as np"【参考方案3】:
from numpy.lib.scimath import logn
from math import e

#using: x - var
logn(e, x)

【讨论】:

【参考方案4】:

我通常是这样的:

from numpy import log as ln

也许这会让你更舒服。

【讨论】:

【参考方案5】:

你可以简单地做相反的事情,将 log 的 base 设置为 e。

import math

e = 2.718281

math.log(e, 10) = 2.302585093
ln(10) = 2.30258093

【讨论】:

注意 math.e 存在,math.log 以第二为基数。所以math.log(10, math.e) 是正确的,而上面实际上会返回〜0.43 ...【参考方案6】:

Numpy 似乎从 MATLAB/Octave 中得到启发,并使用 log 作为“log base e”或 ln。与 MATLAB/Octave 一样,Numpy 不提供任意底数的对数函数。

如果您发现 log 令人困惑,您可以创建自己的对象 ln 引用 numpy.log 函数:

>>> import numpy as np
>>> from math import e
>>> ln = np.log  # assign the numpy log function to a new function called ln
>>> ln(e)
1.0

【讨论】:

以上是关于你如何在 Python 中使用 numpy 处理自然日志(例如“ln()”)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 多处理 Pool.map 在 for 循环中填充 numpy 数组

python中numpy.ndarray怎么删除指定下标的元素

在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?

如何使用 NumPy 在 Python 中读取二进制文件?

python编写自定义lambda函数使用numpy中的np.vectorize函数在numpy数组中的每个元素上施加应用自定义lambda函数生成新的numpy数组

python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]