NumPy:以n为底的对数

120 投票
2 回答
140967 浏览
提问于 2025-04-18 16:18

numpy 的文档中,我找到了可以计算以 e210 为底的对数的函数:

import numpy as np
np.log(np.e**3) #3.0
np.log2(2**3)   #3.0
np.log10(10**3) #3.0

但是,我该如何在 numpy 中计算以 n(例如 42)为底的对数呢?

2 个回答

1

Numpy的底数n对数函数是 np.emath.logn

import numpy as np
arr = np.array([74088, 3111696])      # = [42^3, 42^4]
base = 42
np.emath.logn(base, arr)              # array([3., 4.])

np.emath.logn(14, 14**3)              # 3.0

需要注意的是,与 math.log 不同,底数是第一个参数。另外,它还可以处理负数(会返回一个复数)。

232

如果你使用的是numpy 1.23或更高版本,可以使用np.emath.logn来计算对数:

import numpy as np
array = np.array([74088, 3111696])  # = [42^3, 42^4]
base = 42
exponent = np.emath.logn(base, array)  # = [3, 4]

如果你的numpy版本比较旧:

你可以用math.log来计算自定义底数的对数:

import math
number = 74088  # = 42^3
base = 42
exponent = math.log(number, base)  # = 3

或者用numpy.log来计算自定义底数的对数:

import numpy as np
array = np.array([74088, 3111696])  # = [42^3, 42^4]
base = 42
exponent = np.log(array) / np.log(base)  # = [3, 4]

这两种方法都使用了对数的底数转换规则:

\log_b(x)=\log_c(x)/\log_c(b)

撰写回答