【Python】Math--数学函数(详细附解析~)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 【Python】Math--数学函数(详细附解析~)

🍔 数论与表示函数

  • 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)ⁿ 的多项式展开中第 k 项的系数。如果任一参数不为整数则会引发 TypeError。 如果任一参数为负数则会引发 ValueError3.8 新版功能.
  • math.copysign(x, y)
    返回一个基于 x 的绝对值和 y 的符号的浮点数。在支持带符号零的平台上,copysign(1.0, -0.0) 返回 -1.0.
  • math.fabs(x)
    返回 x 的绝对值。
  • math.factorial(n)
    n 的阶乘作为整数返回。 如果 n 不是正数或为负值则会引发 ValueError3.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)
    返回可迭代对象中的值的精确浮点总计值。 通过跟踪多个中间部分和来避免精度损失。该算法的准确性取决于IEEE-754算术保证和舍入模式为半偶的典型情况。在某些非Windows版本中,底层C库使用扩展精度添加,并且有时可能会使中间和加倍,导致它在最低有效位中关闭。有关待进一步讨论和两种替代方法,参见 ASPN cookbook recipes for accurate floating point summation
  • math.gcd(*integers)
    返回给定的整数参数的最大公约数。 如果有一个参数非零,则返回值将是能同时整除所有参数的最大正整数。 如果所有参数为零,则返回值为 0。 不带参数的 gcd() 返回 03.5 新版功能.**在 3.9 版更改: 添加了对任意数量的参数的支持。 之前的版本只支持两个参数。
  • math.isclose(a, b, ***, rel_tol=1e-09, abs_tol=0.0)
    ab 的值比较接近则返回 True,否则返回 False。根据给定的绝对和相对容差确定两个值是否被认为是接近的。rel_tol 是相对容差 —— 它是 ab 之间允许的最大差值,相对于 ab 的较大绝对值。例如,要设置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) 。IEEE 754特殊值 NaNinf-inf 将根据IEEE规则处理。具体来说, NaN 不被认为接近任何其他值,包括 NaNinf-inf 只被认为接近自己。3.5 新版功能.参见 PEP 485 —— 用于测试近似相等的函数
  • 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。对于某些应用来说,可以更适合取值为使得 na² 的最小整数 a ,或者换句话说就是 n 的实际平方根向上取整。 对于正数 n,这可以使用 a = 1 + isqrt(n - 1) 来计算。3.8 新版功能.
  • math.lcm(*integers)
    返回给定的整数参数的最小公倍数。 如果所有参数均非零,则返回值将是为所有参数的整数倍的最小正整数。 如果参数之一为零,则返回值为 0。 不带参数的 lcm() 返回 13.9 新版功能.
  • math.ldexp(x, i)
    返回 x * (2**i) 。 这基本上是函数 frexp() 的反函数。
  • math.modf(x)
    返回 x 的小数和整数部分。两个结果都带有 x 的符号并且是浮点数。
  • math.nextafter(x, y, steps=1)
    返回从 xy 的步数的浮点值 steps。如果 x 等于 y,则返回 y,除非 steps 值为零。示例: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.12 版更改: 增加了 steps 参数。3.9 新版功能.
  • math.perm(n, k=None)
    返回不重复且有顺序地从 n 项中选择 k 项的方式总数。当 k <= n 时取值为 n! / (n - k)!;当 k > n 时取值为零。如果 k 未指定或为 None,则 k 默认值为 n 并且函数将返回 n!。如果任一参数不为整数则会引发 TypeError。 如果任一参数为负数则会引发 ValueError3.8 新版功能.
  • math.prod(iterable, ***, start=1)
    计算输入的 iterable 中所有元素的积。 积的默认 start 值为 1。当可迭代对象为空时,返回起始值。 此函数特别针对数字值使用,并会拒绝非数字类型。3.8 新版功能.
  • math.remainder(x, y)
    返回 IEEE 754 风格的 x 相对于 y 的余数。对于有限 x 和有限非零 y ,这是差异 x - n*y ,其中 n 是与商 x / y 的精确值最接近的整数。如果 x / y 恰好位于两个连续整数之间,则将最接近的 偶数 用作 n 。 余数 r = remainder(x, y) 因此总是满足 abs(r) <= 0.5 * abs(y)。特殊情况遵循IEEE 754:特别是 remainder(x, math.inf) 对于任何有限 x 都是 x ,而 remainder(x, 0)remainder(math.inf, x) 引发 ValueError 适用于任何非NaN的 x 。如果余数运算的结果为零,则该零将具有与 x 相同的符号。在使用IEEE 754二进制浮点的平台上,此操作的结果始终可以完全表示:不会引入舍入错误。3.7 新版功能.
  • math.sumprod(p, q)
    两个可迭代对象 pq 中的值的乘积的总计值。如果输入值的长度不相等则会引发 ValueError。大致相当于:sum(itertools.starmap(operator.mul, zip(p, q, strict=True)))对于浮点数或混合整数/浮点数的输入,中间的乘积和总计值将使用扩展精度来计算。3.12 新版功能.
  • 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 即 "Unit in the Last Place" 的缩写。另请参阅 math.nextafter()sys.float_info.epsilon3.9 新版功能.

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

对于 ceil()floor()modf() 函数,请注意 所有 足够大的浮点数都是精确整数。Python浮点数通常不超过53位的精度(与平台C double类型相同),在这种情况下,任何浮点 xabs(x) >= 2**52 必然没有小数位。

🍔 幂函数与对数函数

  • math.cbrt(x)
    返回 x 的立方根。3.11 新版功能.
  • math.exp(x)
    返回 ex 次幂,其中 e = 2.718281... 是自然对数的基数。这通常比 math.e ** xpow(math.e, x) 更精确。
  • math.exp2(x)
    返回 2x 次幂。3.11 新版功能.
  • math.expm1(x)
    返回 ex,减去 1。 这里 e 是以自然对数作为基数。 对于小浮点数 x,在 exp(x) - 1 中的减法运算可能导致 明显的精度损失; expm1() 函数提供了一种以完整精度计算此数量的办法:>>>>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-053.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)
    返回 xy 次幂。 特殊情况将尽可能遵循 IEEE 754 标准。 特别地,pow(1.0, x)pow(x, 0.0) 总是返回 1.0,即使当 x 为零或 NaN 也是如此。 如果 xy 均为有限值,x 为负数,而 y 不是整数则 pow(x, y) 是未定义的,并将引发 ValueError。与内置的 ** 运算符不同, math.pow() 将其参数转换为 float 类型。使用 ** 或内置的 pow() 函数来计算精确的整数幂。在 3.11 版更改: 特殊情况 pow(0.0, -inf)pow(-0.0, -inf) 已改为返回 inf 而不是引发 ValueError,以便同 IEEE 754 保持一致。
  • math.sqrt(x)
    返回 x 的平方根。

🍔 三角函数

  • math.acos(x)
    返回以弧度为单位的 x 的反余弦值。 结果范围在 0pi 之间。
  • math.asin(x)
    返回以弧度为单位的 x 的反正弦值。 结果范围在 -pi/2pi/2 之间。
  • math.atan(x)
    返回以弧度为单位的 x 的反正切值。 结果范围在 -pi/2pi/2 之间。.
  • math.atan2(y, x)
    以弧度为单位返回 atan(y / x) 。结果是在 -pipi 之间。从原点到点 (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)
    返回 pq 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。大致相当于:sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))3.8 新版功能.
  • math.hypot(*coordinates)
    返回欧几里得范数,sqrt(sum(x**2 for x in coordinates))。 这是从原点到坐标给定点的向量长度。对于一个二维点 (x, y),这等价于使用毕达哥拉斯定义 sqrt(x*x + y*y) 计算一个直角三角形的斜边。在 3.8 版更改: 添加了对 n 维点的支持。 之前的版本只支持二维点。在 3.10 版更改: 改进了算法的精确性,使得最大误差在 1 ulp (最后一位的单位数值) 以下。 更为常见的情况是,结果几乎总是能正确地舍入到 1/2 ulp 范围之内。
  • 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 处的 误差函数erf() 函数可用来计算传统的统计函数如 累计标准正态分布:def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.03.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 的信息可参考 Vi Hart 的视频 Pi is (still) Wrong。吃两倍多的派来庆祝 Tau 日 吧!3.6 新版功能.
  • math.inf
    浮点正无穷大。 (对于负无穷大,使用 -math.inf 。)相当于 float('inf') 的输出。3.5 新版功能.
  • math.nan
    一个浮点数值 "Not a Number" (NaN)。 相当于 float('nan') 的输出。 根据 IEEE-754 标准 要求,math.nanfloat('nan') 不会被视为等于任何其他数值,包括其本身。 要检查一个数字是否为 NaN,请使用 isnan() 函数来测试 NaN 而不能使用 is==。 例如:>>>>>> import math >>> math.nan == math.nan False >>> float('nan') == float('nan') False >>> math.isnan(math.nan) True >>> math.isnan(float('nan')) True在 3.11 版更改: 该常量现在总是可用。3.5 新版功能.

CPython 实现细节: 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视为静默的。

相关文章
|
21天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
29 2
|
1月前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
21 1
|
1月前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
2月前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
60 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
2月前
|
XML 前端开发 数据格式
Beautiful Soup 解析html | python小知识
在数据驱动的时代,网页数据是非常宝贵的资源。很多时候我们需要从网页上提取数据,进行分析和处理。Beautiful Soup 是一个非常流行的 Python 库,可以帮助我们轻松地解析和提取网页中的数据。本文将详细介绍 Beautiful Soup 的基础知识和常用操作,帮助初学者快速入门和精通这一强大的工具。【10月更文挑战第11天】
62 2
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
15天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0