math --- 數學函式— Python 3.10.6 說明文件

文章推薦指數: 80 %
投票人數:10人

该模块提供了对C标准定义的数学函数的访问。

这些函数不适用于复数;如果你需要计算复数,请使用 cmath 模块中的同名函数。

将支持计算 ... 瀏覽 索引 模組| 下一頁| 上一頁| Python» 3.10.6Documentation» Python標準函式庫(StandardLibrary)» 數值與數學模組» math---數學函式 | math---數學函式¶ 该模块提供了对C标准定义的数学函数的访问。

这些函数不适用于复数;如果你需要计算复数,请使用cmath模块中的同名函数。

将支持计算复数的函数区分开的目的,来自于大多数开发者并不愿意像数学家一样需要学习复数的概念。

得到一个异常而不是一个复数结果使得开发者能够更早地监测到传递给这些函数的参数中包含复数,进而调查其产生的原因。

该模块提供了以下函数。

除非另有明确说明,否则所有返回值均为浮点数。

数论与表示函数¶ math.ceil(x)¶ 返回x的向上取整,即大于或等于x的最小的整数。

如果x不是浮点数,委托给x.__ceil__,它应该返回一个Integral的值。

math.comb(n,k)¶ 返回不重复且无顺序地从n项中选择k项的方式总数。

当k<=n时取值为n!/(k!*(n-k)!);当k>n时取值为零。

也称为二项式系数,因为它等价于表达式(1+x)**n的多项式展开中第k项的系数。

如果任一参数不为整数则会引发TypeError。

如果任一参数为负数则会引发ValueError。

3.8版新加入. math.copysign(x,y)¶ 返回一个基于x的绝对值和y的符号的浮点数。

在支持带符号零的平台上,copysign(1.0,-0.0)返回-1.0. math.fabs(x)¶ 返回x的绝对值。

math.factorial(x)¶ 以一个整数返回x的阶乘。

如果x不是整数或为负数时则将引发ValueError。

3.9版後已棄用:接受具有整数值的浮点数(例如5.0)的行为已被弃用。

math.floor(x)¶ 返回x的向下取整,小于或等于x的最大整数。

如果x不是浮点数,则委托给x.__floor__,它应返回一个Integral值。

math.fmod(x,y)¶ 返回fmod(x,y),由平台C库定义。

请注意,Python表达式x%y可能不会返回相同的结果。

C标准的目的是fmod(x,y)完全(数学上;到无限精度)等于x-n*y对于某个整数n,使得结果具有与x相同的符号和小于abs(y)的幅度。

Python的x%y返回带有y符号的结果,并且可能不能完全计算浮点参数。

例如,fmod(-1e-100,1e100)是-1e-100,但Python的-1e-100%1e100的结果是1e100-1e-100,它不能完全表示为浮点数,并且取整为令人惊讶的1e100。

出于这个原因,函数fmod()在使用浮点数时通常是首选,而Python的x%y在使用整数时是首选。

math.frexp(x)¶ 以(m,e)对的形式返回x的尾数和指数。

m是一个浮点数,e是一个整数,正好是x==m*2**e。

如果x为零,则返回(0.0,0),否则返回0.5<=abs(m)<1。

这用于以可移植方式“分离”浮点数的内部表示。

math.fsum(iterable)¶ 返回迭代中的精确浮点值。

通过跟踪多个中间部分和来避免精度损失: >>>sum([.1,.1,.1,.1,.1,.1,.1,.1,.1,.1]) 0.9999999999999999 >>>fsum([.1,.1,.1,.1,.1,.1,.1,.1,.1,.1]) 1.0 该算法的准确性取决于IEEE-754算术保证和舍入模式为半偶的典型情况。

在某些非Windows版本中,底层C库使用扩展精度添加,并且有时可能会使中间和加倍,导致它在最低有效位中关闭。

有关待进一步讨论和两种替代方法,参见ASPNcookbookrecipesforaccuratefloatingpointsummation。

math.gcd(*integers)¶ 返回给定的整数参数的最大公约数。

如果有一个参数非零,则返回值将是能同时整除所有参数的最大正整数。

如果所有参数为零,则返回值为0。

不带参数的gcd()返回0。

3.5版新加入. 3.9版更變:添加了对任意数量的参数的支持。

之前的版本只支持两个参数。

math.isclose(a,b,*,rel_tol=1e-09,abs_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)。

IEEE754特殊值NaN,inf和-inf将根据IEEE规则处理。

具体来说,NaN不被认为接近任何其他值,包括NaN。

inf和-inf只被认为接近自己。

3.5版新加入. 也參考 PEP485——用于测试近似相等的函数 math.isfinite(x)¶ 如果x既不是无穷大也不是NaN,则返回True,否则返回False。

(注意0.0被认为是有限的。

) 3.2版新加入. math.isinf(x)¶ 如果x是正或负无穷大,则返回True,否则返回False。

math.isnan(x)¶ 如果x是NaN(不是数字),则返回True,否则返回False。

math.isqrt(n)¶ 返回非负整数n的整数平方根。

这就是对n的实际平方根向下取整,或者相当于使得a² ≤ n的最大整数a。

对于某些应用来说,可以更适合取值为使得n ≤ a²的最小整数a,或者换句话说就是n的实际平方根向上取整。

对于正数n,这可以使用a=1+isqrt(n-1)来计算。

3.8版新加入. math.lcm(*integers)¶ 返回给定的整数参数的最小公倍数。

如果所有参数均非零,则返回值将是为所有参数的整数倍的最小正整数。

如果参数之一为零,则返回值为0。

不带参数的lcm()返回1。

3.9版新加入. math.ldexp(x,i)¶ 返回x*(2**i)。

这基本上是函数frexp()的反函数。

math.modf(x)¶ 返回x的小数和整数部分。

两个结果都带有x的符号并且是浮点数。

math.nextafter(x,y)¶ 返回x趋向于y的最接近的浮点数值。

如果x等于y则返回y。

範例: math.nextafter(x,math.inf)的方向朝上:趋向于正无穷。

math.nextafter(x,-math.inf)的方向朝下:趋向于负无穷。

math.nextafter(x,0.0)趋向于零。

math.nextafter(x,math.copysign(math.inf,x))趋向于零的反方向。

另請參閱math.ulp()。

3.9版新加入. math.perm(n,k=None)¶ 返回不重复且有顺序地从n项中选择k项的方式总数。

当k<=n时取值为n!/(n-k)!;当k>n时取值为零。

如果k未指定或为None,则k默认值为n并且函数将返回n!。

如果任一参数不为整数则会引发TypeError。

如果任一参数为负数则会引发ValueError。

3.8版新加入. math.prod(iterable,*,start=1)¶ 计算输入的iterable中所有元素的积。

积的默认start值为1。

当可迭代对象为空时,返回起始值。

此函数特别针对数字值使用,并会拒绝非数字类型。

3.8版新加入. math.remainder(x,y)¶ 返回IEEE754风格的x相对于y的余数。

对于有限x和有限非零y,这是差异x-n*y,其中n是与商x/y的精确值最接近的整数。

如果x/y恰好位于两个连续整数之间,则将最接近的偶数用作n。

余数r=remainder(x,y)因此总是满足abs(r)<=0.5*abs(y)。

特殊情况遵循IEEE754:特别是remainder(x,math.inf)对于任何有限x都是x,而remainder(x,0)和remainder(math.inf,x)引发ValueError适用于任何非NaN的x。

如果余数运算的结果为零,则该零将具有与x相同的符号。

在使用IEEE754二进制浮点的平台上,此操作的结果始终可以完全表示:不会引入舍入错误。

3.7版新加入. math.trunc(x)¶ 返回去除小数部分的x,只留下整数部分。

这样就可以四舍五入到0了:trunc()对于正的x相当于floor(),对于负的x相当于ceil()。

如果x不是浮点数,委托给x.__trunc__,它应该返回一个Integral值。

math.ulp(x)¶ 返回浮点数x的最小有效比特位的值: 如果x是NaN(非数字),则返回x。

如果x为负数,则返回ulp(-x)。

如果x为正数,则返回x。

如果x等于零,则返回去正规化的可表示最小正浮点数(小于正规化的最小正浮点数sys.float_info.min)。

如果x等于可表示最大正浮点数,则返回x的最低有效比特位的值,使得小于x的第一个浮点数为x-ulp(x)。

在其他情况下(x是一个有限的正数),则返回x的最低有效比特位的值,使得大于x的第一个浮点数为x+ulp(x)。

ULP即"UnitintheLastPlace"的缩写。

另请参阅math.nextafter()和sys.float_info.epsilon。

3.9版新加入. 注意frexp()和modf()具有与它们的C等价函数不同的调用/返回模式:它们采用单个参数并返回一对值,而不是通过'输出形参'返回它们的第二个返回参数(Python中没有这样的东西)。

对于ceil(),floor()和modf()函数,请注意所有足够大的浮点数都是精确整数。

Python浮点数通常不超过53位的精度(与平台Cdouble类型相同),在这种情况下,任何浮点x与abs(x)>=2**52必然没有小数位。

幂函数与对数函数¶ math.exp(x)¶ 返回e次x幂,其中e=2.718281...是自然对数的基数。

这通常比math.e**x或pow(math.e,x)更精确。

math.expm1(x)¶ 返回e的x次幂,减1。

这里e是自然对数的基数。

对于小浮点数x,exp(x)-1中的减法可能导致significantlossofprecision;expm1()函数提供了一种将此数量计算为全精度的方法: >>>frommathimportexp,expm1 >>>exp(1e-5)-1#givesresultaccurateto11places 1.0000050000069649e-05 >>>expm1(1e-5)#resultaccuratetofullprecision 1.0000050000166668e-05 3.2版新加入. math.log(x[,base])¶ 使用一个参数,返回x的自然对数(底为e)。

使用两个参数,返回给定的base的对数x,计算为log(x)/log(base)。

math.log1p(x)¶ 返回1+x的自然对数(以e为底)。

以对于接近零的x精确的方式计算结果。

math.log2(x)¶ 返回x以2为底的对数。

这通常比log(x,2)更准确。

3.3版新加入. 也參考 int.bit_length()返回表示二进制整数所需的位数,不包括符号和前导零。

math.log10(x)¶ 返回x底为10的对数。

这通常比log(x,10)更准确。

math.pow(x,y)¶ 将返回x的y次幂。

特殊情况尽可能遵循C99标准的附录'F'。

特别是,pow(1.0,x)和pow(x,0.0)总是返回1.0,即使x是零或NaN。

如果x和y都是有限的,x是负数,y不是整数那么pow(x,y)是未定义的,并且引发ValueError。

与内置的**运算符不同,math.pow()将其参数转换为float类型。

使用**或内置的pow()函数来计算精确的整数幂。

math.sqrt(x)¶ 返回x的平方根。

三角函数¶ math.acos(x)¶ 返回以弧度为单位的x的反余弦值。

结果范围在0到pi之间。

math.asin(x)¶ 返回以弧度为单位的x的反正弦值。

结果范围在-pi/2到pi/2之间。

math.atan(x)¶ 返回以弧度为单位的x的反正切值。

结果范围在-pi/2到pi/2之间。

. math.atan2(y,x)¶ 以弧度为单位返回atan(y/x)。

结果是在-pi和pi之间。

从原点到点(x,y)的平面矢量使该角度与正X轴成正比。

atan2()的点的两个输入的符号都是已知的,因此它可以计算角度的正确象限。

例如,atan(1)和atan2(1,1)都是pi/4,但atan2(-1,-1)是-3*pi/4。

math.cos(x)¶ 返回x弧度的余弦值。

math.dist(p,q)¶ 返回p与q两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。

两个点必须具有相同的维度。

大致相当于: sqrt(sum((px-qx)**2.0forpx,qxinzip(p,q))) 3.8版新加入. math.hypot(*coordinates)¶ 返回欧几里得范数,sqrt(sum(x**2forxincoordinates))。

这是从原点到坐标给定点的向量长度。

对于一个二维点(x,y),这等价于使用毕达哥拉斯定义sqrt(x*x+y*y)计算一个直角三角形的斜边。

3.8版更變:添加了对n维点的支持。

之前的版本只支持二维点。

3.10版更變:改进了算法的精确性,使得最大误差在1ulp(最后一位的单位数值)以下。

更为常见的情况是,结果几乎总是能正确地舍入到1/2ulp范围之内。

math.sin(x)¶ 返回x弧度的正弦值。

math.tan(x)¶ 返回x弧度的正切值。

角度转换¶ math.degrees(x)¶ 将角度x从弧度转换为度数。

math.radians(x)¶ 将角度x从度数转换为弧度。

双曲函数¶ 双曲函数是基于双曲线而非圆来对三角函数进行模拟。

math.acosh(x)¶ 返回x的反双曲余弦值。

math.asinh(x)¶ 返回x的反双曲正弦值。

math.atanh(x)¶ 返回x的反双曲正切值。

math.cosh(x)¶ 返回x的双曲余弦值。

math.sinh(x)¶ 返回x的双曲正弦值。

math.tanh(x)¶ 返回x的双曲正切值。

特殊函数¶ math.erf(x)¶ 返回x处的errorfunction。

Theerf()functioncanbeusedtocomputetraditionalstatistical functionssuchasthecumulativestandardnormaldistribution: defphi(x): 'Cumulativedistributionfunctionforthestandardnormaldistribution' return(1.0+erf(x/sqrt(2.0)))/2.0 3.2版新加入. math.erfc(x)¶ 返回x处的互补误差函数。

互补错误函数定义为1.0-erf(x)。

它用于x的大值,从其中减去一个会导致有效位数损失。

3.2版新加入. math.gamma(x)¶ 返回x处的伽马函数值。

3.2版新加入. math.lgamma(x)¶ 返回Gamma函数在x绝对值的自然对数。

3.2版新加入. 常數¶ math.pi¶ 数学常数π=3.141592...,精确到可用精度。

math.e¶ 数学常数e=2.718281...,精确到可用精度。

math.tau¶ 数学常数τ=6.283185...,精确到可用精度。

Tau是一个圆周常数,等于2π,圆的周长与半径之比。

更多关于Tau的信息可参考ViHart的视频Piis(still)Wrong。

吃两倍多的派来庆祝Tau日吧! 3.6版新加入. math.inf¶ 浮点正无穷大。

(对于负无穷大,使用-math.inf。

)相当于float('inf')的输出。

3.5版新加入. math.nan¶ 一个浮点的"非数字"(NaN)值。

相当于float('nan')的输出。

由于IEEE-754标准的要求,math.nan和float('nan')不被认为等于任何其他数值,包括其本身。

要检查一个数字是否为NaN,请使用isnan()函数来测试NaN,而不是is或==。

例子: >>>importmath >>>math.nan==math.nan False >>>float('nan')==float('nan') False >>>math.isnan(math.nan) True >>>math.isnan(float('nan')) True 3.5版新加入. CPythonimplementationdetail:math模块主要包含围绕平台C数学库函数的简单包装器。

特殊情况下的行为在适当情况下遵循C99标准的附录F。

当前的实现将引发ValueError用于无效操作,如sqrt(-1.0)或log(0.0)(其中C99附件F建议发出无效操作信号或被零除),和OverflowError用于溢出的结果(例如,exp(1000.0))。

除非一个或多个输入参数是NaN,否则不会从上述任何函数返回NaN;在这种情况下,大多数函数将返回一个NaN,但是(再次遵循C99附件F)这个规则有一些例外,例如pow(float('nan'),0.0)或hypot(float('nan'),float('inf'))。

请注意,Python不会将显式NaN与静默NaN区分开来,并且显式NaN的行为仍未明确。

典型的行为是将所有NaN视为静默的。

也參考 cmath模組这里很多函数的复数版本。

目录 math---數學函式 数论与表示函数 幂函数与对数函数 三角函数 角度转换 双曲函数 特殊函数 常數 上個主題 numbers---数字的抽象基类 下個主題 cmath---关于复数的数学函数 此頁面 回報錯誤 顯示原始碼 瀏覽 索引 模組| 下一頁| 上一頁| Python» 3.10.6Documentation» Python標準函式庫(StandardLibrary)» 數值與數學模組» math---數學函式 |



請為這篇文章評分?