在Python中计算指数和对数函数(exp, log, log10, log2)。

商业

使用数学,Python的数学函数标准模块,你可以计算指数和对数函数(自然对数、普通对数和二进制对数)。

这里解释一下,并附有示例代码。

  • 自然对数(纳皮尔数)的基数:math.e
  • 权力。:**经营者,pow(),math.pow()
  • 平方根(root):math.sqrt()
  • 指数函数(自然指数函数):math.exp()
  • 一个对数函数:math.log(),math.log10(),math.log2()

自然对数(纳皮尔数)的基数: math.e

自然对数(Napier数)的基数在数学模块中作为一个常数提供,用math.e表示。

import math

print(math.e)
# 2.718281828459045

权力。**运算符, pow(), math.pow(): **经营者, pow(), math.pow()

要计算幂,可以使用**运算符、内置函数pow()或math.pow()。

x的y平方得到如下结果

  • x**y
  • pow(x, y)
  • math.pow(x, y)
print(2**4)
# 16

print(pow(2, 4))
# 16

print(math.pow(2, 4))
# 16.0

math.pow()将参数转换为浮点类型。另一方面,Python的内置函数pow()使用为每种类型定义的__pow()__。

例如,pow()允许指定复杂类型作为参数,但math.pow()不能将复杂类型转换为浮点类型,导致错误。

print(pow(1 + 1j, 2))
# 2j

# print(math.pow(1 + 1j, 2))
# TypeError: can't convert complex to float

Python内置函数pow()也允许第三个参数,pow(x, y, z),它返回z到x的y次方的余数(余数),它与pow(x, y) % z的计算相同,但pow(x, y, z)更有效率。

print(pow(2, 4, 5))
# 1

平方根(root): math.sqrt()

可以使用**或math.sqrt()将平方根(root)设置为**0.5。

print(2**0.5)
# 1.4142135623730951

print(math.sqrt(2))
# 1.4142135623730951

print(2**0.5 == math.sqrt(2))
# True

和math.pow()一样,math.sqrt()将参数转换为浮点类型进行处理,所以指定一个不能转换为浮点类型的类型将导致一个TypeError。

print((-3 + 4j)**0.5)
# (1.0000000000000002+2j)

# print(math.sqrt(-3 + 4j))
# TypeError: can't convert complex to float

另外,math.sqrt()不能处理负值,导致ValueError。

print((-1)**0.5)
# (6.123233995736766e-17+1j)

# print(math.sqrt(-1))
# ValueError: math domain error

注意,在处理复数时,使用**运算符的例子显示了一个错误,但cmath模块提供了一个更准确的值。负值也可以被处理。

import cmath

print(cmath.sqrt(-3 + 4j))
# (1+2j)

print(cmath.sqrt(-1))
# 1j

指数函数(自然指数函数): math.exp()

要计算自然对数(纳皮尔数)e的基数的幂,请使用math.exp()。

math.exp(x) 返回e的x的平方。
math.exp(x)不等同于 “math.e ** x”,math.exp(x)更准确。

print(math.exp(2))
# 7.38905609893065

print(math.exp(2) == math.e**2)
# False

一个对数函数: math.log(), math.log10(), math.log2()

要计算对数函数,使用math.log(),math.log10(),math.log2()。

math.log(x, y) 返回以 y 为底的 x 的对数。

print(math.log(25, 5))
# 2.0

如果省略第二个参数,自然对数如下所示。

对数

在数学中,自然对数(以纳皮尔数e为底的对数),用log或ln表示,可以用math.log(x)计算。

print(math.log(math.e))
# 1.0

对数(以10为底)

普通对数(以10为底的对数)可以用math.log10(x)计算,它比math.log(x, 10)更精确。

print(math.log10(100000))
# 5.0

二进制对数

二进制对数(以2为底的对数)可以用math.log2(x)计算,它比math.log(x, 2)更准确。

print(math.log2(1024))
# 10.0