该模块提供对复数数学函数的访问。 该模块中的函数接受整数、浮点数或复数作为参数。 它们还将接受任何具有 __complex__() 或 __float__() 方法的 Python 对象:这些方法分别用于将对象转换为复数或浮点数,然后将函数应用于 转换。

注意

在硬件和系统级支持平台符号的零,涉及分支机构削减功能是连续两个 分支切割面:零的符号与其他分支切口的一侧区别。在不支持带符号零的平台上,连续性如下所述。

极坐标的转换

Python 复数 z 使用矩形或笛卡尔坐标在内部存储。 它完全由它的实部 z.real 和它的虚部 z.imag 决定。 换句话说:

z == z.real + z.imag*1j

极坐标提供了另一种表示复数的方法。 在极坐标中,复数 z 由模 r 和相位角 phi 定义。 模量 r 是从 z 到原点的距离,而相位 phi 是逆时针角度,以弧度为单位,从正 x 轴到连接原点和 z 的线段。

以下函数可用于将原始直角坐标转换为极坐标并返回。

cmath.phase(x)
返回 x 的相位(也称为 x 的参数),作为浮点数。 phase(x) 等价于 math.atan2(x.imag, x.real)。 结果位于 [-π, π] 范围内,此操作的分支切割位于负实轴上,从上方连续。 在支持有符号零的系统上(包括当前使用的大多数系统),这意味着结果的符号与 x.imag 的符号相同,即使 x.imag 为零:

>>>
>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793

注意

可以使用内置 abs() 函数计算复数 x 的模数(绝对值)。 此操作没有单独的 cmath 模块功能。

cmath.polar(x)
返回 x 在极坐标中的表示。 返回一对 (r, phi),其中 r 是 x 的模数,phi 是 x 的相位。 polar(x) 等价于 (abs(x), phase(x))。
cmath.rect(rphi)
返回具有极坐标 r 和 phi 的复数 x。 等价于 r * (math.cos(phi) + math.sin(phi)*1j)。

幂函数对数函数

cmath.exp(x)
返回e的x次方,其中e是自然对数的底。
cmath.log(x[base])
返回给定底的 x 的对数。 如果未指定底数,则返回 x 的自然对数。 有一个分支切割,从 0 沿负实轴到 -∞,从上方连续。
cmath.log10(x)
返回 x 的以 10 为底的对数。 这与 log() 具有相同的分支切割。
cmath.sqrt(x)
返回 x 的平方根。 这与 log() 具有相同的分支切割。

三角函数

cmath.acos(x)
返回 x 的反余弦值。 有两个分支切割:一个从 1 沿实轴向右延伸到 ∞,从下方连续。 另一个从 -1 沿实轴向左延伸到 -∞,从上方连续。
cmath.asin(x)
返回 x 的反正弦。 这与 acos() 具有相同的分支切割。
cmath.atan(x)
返回 x 的反正切。 有两个分支切口:一个从 1j 沿虚轴延伸到 ∞j,从右侧连续。 另一个从 -1j 沿虚轴延伸到 -∞j,从左侧连续。
cmath.cos(x)
返回 x 的余弦。
cmath.sin(x)
返回 x 的正弦值。
cmath.tan(x)
返回x的正切值。

双曲函数

cmath.acosh(x)
返回x的反双曲余弦值。有一个分支切口,沿着实轴从1向左延伸到-∞,从上方连续。
cmath.asinh(x)
返回x的反双曲正弦值。有两个分支切口:一个从1j假想轴延伸到∞j右边连续。另一个从-1j假想轴延伸到-∞j左边连续。
cmath.atanh(x)
返回x的反双曲正切。有两个分支切口:一个从1实轴延伸到从下方连续。另一个从-1实轴延伸到-∞从上方连续。
cmath.cosh(xx0
返回x的双曲余弦值。
cmath.sinh(x)
返回x的双曲正弦值。
cmath.tanh(x)
返回x的双曲正切值。

分类功能

cmath.isfinite(x)
如果 x 的实部和虚部都是有限的,则返回 True,否则返回 False。

3.2 版中的新功能。

cmath.isinf(x)
如果 x 的实部或虚部是无穷大,则返回 True,否则返回 False。
cmath.isnan(x)
如果 x 的实部或虚部是 NaN,则返回 True,否则返回 False。
cmath.isclose(ab*rel_tol=1e-09abs_tol=0.0)
如果值 a 和 b 彼此接近,则返回 True,否则返回 False。

根据给定的绝对和相对公差确定两个值是否接近。

rel_tol 是相对容差——它是 a 和 b 之间允许的最大差异,相对于 a 或 b 的较大绝对值。 例如,要设置 5% 的容差,请传递 rel_tol=0.05。 默认容差为 1e-09,可确保两个值在大约 9 位十进制数字内相同。 rel_tol 必须大于零。

abs_tol 是最小绝对容差——对于接近零的比较有用。 abs_tol 必须至少为零。

如果没有发生错误,结果将是:abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)。

NaN、inf 和 -inf 的 IEEE 754 特殊值将根据 IEEE 规则进行处理。 具体来说,NaN 不被视为接近任何其他值,包括 NaN。 inf 和 -inf 仅被视为接近它们自己。

常数

cmath.pi
数学常数 π,作为浮点数。
cmath.e
数学常数e,作为浮点数。
cmath.tau
数学常数τ,作为浮点数。

版本3.6中的新功能。

cmath.inf
浮点正无穷大。相当于float('inf')

版本3.6中的新功能。

cmath.infj
具有零实部和正无穷虚部的复数。相当于complex(0.0, float('inf'))

版本3.6中的新功能。

cmath.nan
浮点“非数字”(NaN)值。相当于 float('nan')

版本3.6中的新功能。

cmath.nanj
具有零实部和NaN虚部的复数。相当于 complex(0.0, float('nan'))

版本3.6中的新功能。

请注意,函数的选择与模块数学中的选择相似,但并不完全相同。 有两个模块的原因是一些用户对复数不感兴趣,甚至可能不知道它们是什么。 他们宁愿让 math.sqrt(-1) 引发异常,也不愿返回一个复数。 还要注意,在 cmath 中定义的函数总是返回一个复数,即使答案可以表示为一个实数(在这种情况下,复数的虚部为零)。

关于分支切割的注释:它们是给定函数无法连续的曲线。 它们是许多复杂功能的必要特征。 假设如果您需要使用复杂的函数进行计算,您将了解分支切割。 查阅几乎所有(不是太初级的)关于复杂变量的书籍以获得启发。 有关为数字目的正确选择分支切割的信息,以下是一个很好的参考: