如何在Python中对函数取自然对数?

0 投票
3 回答
15145 浏览
提问于 2025-04-18 17:00

我用polyfit这个工具找到了一个数据集的拟合线,但现在我需要找出这个拟合线函数的自然对数,并把它画出来。以下是我目前的代码:

#Fit line for PD
deg = 10
zn = np.polyfit(l_bins, l_hits, deg)
l_pn = np.poly1d(zn)
pylab.plot(l_bins, l_pn(l_bins), '-g')
ln_list = []
for all in l_bins:
    ln_list.append(np.log(l_pn(all)))
pylab.plot(l_bins, ln_list, '-b')

有没有更好或者更正确的方法来做到这一点呢?

3 个回答

1

log(x) 是以 10 为底的对数,而 ln(x) 是以自然数 e 为底的对数。

import math
x = 8
print(math.log(x, math.e))
3

看起来你只是想要最初提供的那些区间的值。如果是这样的话,这样做会更简单,而且速度会快很多。

ln_list = np.log(l_pn(l_bins))

记住,numpy 的函数通常会对数组中的每一个元素单独进行操作,只要这样做是合理的。

-1

编辑
我建议使用 numpy.log,就像Roger Fan下面展示的那样。因为你已经在使用numpy数组,这样做的效率肯定比用 map 或列表推导式要高。


原始回答
如果你有一个包含z值的 list,你可以用 map 对每个值执行某个函数,这里是 log(也就是 ln)。

>>> x = range(1,10)
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> from math import log
>>> map(log, x)
[0.0, 0.6931471805599453, 1.0986122886681098, 1.3862943611198906, 1.6094379124341003, 1.791759469228055, 1.9459101490553132, 2.0794415416798357, 2.1972245773362196]

你可以使用任何函数,所以如果你喜欢的话,可以用 numpy.log

撰写回答