Python中log函数属math模块或numpy库,用于计算自然对数、常用对数及任意底数对数;math.log适用于单值,math.log10/log2更高效明确,numpy.log系列支持数组批量运算,需注意参数正性及导入要求。

Python 中没有直接叫 log 的独立函数,它属于 math 模块或 numpy 库,用途是计算对数。最常用的是自然对数(以 e 为底)和以 10 为底的常用对数,也可以指定任意底数。
math.log:基础对数计算(推荐用于单个数值)
导入 math 后,用 math.log(x) 计算自然对数(ln x),math.log(x, base) 可指定底数。
-
math.log(10)→ 约 2.3026(ln 10) -
math.log(100, 10)→ 2.0(log₁₀100) -
math.log(8, 2)→ 3.0(log₂8)
⚠️ 注意:x 必须 > 0,否则抛出 ValueError;底数必须 > 0 且 ≠ 1。
math.log10 和 math.log2:更高效、更明确的写法
这两个是专用函数,比 math.log(x, 10) 或 math.log(x, 2) 更快、更可读,也避免传错底数。
立即学习“Python免费学习笔记(深入)”;
-
math.log10(1000)→ 3.0 -
math.log2(16)→ 4.0
它们同样要求参数 > 0。
numpy.log 系列:批量处理数组
如果要对列表、NumPy 数组批量计算对数,用 numpy 更合适:
-
np.log([1, np.e, np.e**2])→[0., 1., 2.](自然对数) -
np.log10([1, 10, 100])→[0., 1., 2.] -
np.log2([1, 2, 4, 8])→[0., 1., 2., 3.]
⚠️ 注意:输入含 ≤ 0 时,对应结果为 nan 或 -inf,不会报错(但会警告)。如需安全处理,可先用 np.where 过滤。
常见错误和避坑提醒
新手容易踩的几个点:
- 忘记
import math或import numpy as np,直接写log(10)会报NameError - 误以为
math.log(100, 10)是“10 的 log”,其实它是“log₁₀100”,顺序是log(真数, 底数) - 对负数或零调用,
math版本直接崩溃,numpy版本返回nan,需提前校验 - 想算常用对数却写了
math.log(100)(这是 ln100 ≈ 4.605),应改用math.log10(100)
基本上就这些。选 math 还是 numpy,看你是算一个数还是算一串数——不复杂,但细节容易忽略。










