Python math 标准库学习总结

math --- 数学函数¶


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

这些函数不适用于复数;如果你需要计算复数,请使用 cmath 模块中的同名函数。将支持计算复数的函数区分开的目的,来自于大多数开发者并不愿意像数学家一样需要学习复数的概念。得到一个异常而不是一个复数结果使得开发者能够更早地监测到传递给这些函数的参数中包含复数,进而调查其产生的原因。

该模块提供了以下函数。除非另有明确说明,否则所有返回值均为浮点数。

数论与表示函数

math.ceil(x)

返回 x 的上限,即大于或者等于 x 的最小整数。如果 x 不是一个浮点数,则委托 x.__ceil__(), 返回一个 Integral 类的值。

math.copysign(xy)

返回一个基于 x 的绝对值和 y 的符号的浮点数。在支持带符号零的平台上,copysign(1.0, -0.0) 返回 -1.0.

math.fabs(x)

返回 x 的绝对值。

math.factorial(x)

以一个整数返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError。

math.floor(x)

返回 x 的向下取整,小于或等于 x 的最大整数。如果 x 不是浮点数,则委托 x.__floor__() ,它应返回 Integral 值。

math.fmod(xy)

返回 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库使用扩展精度添加,并且有时可能会使中间和加倍,导致它在最低有效位中关闭。

有关待进一步讨论和两种替代方法,参见 ASPN cookbook recipes for accurate floating point summation。

math.gcd(ab)

返回整数 a 和 b 的最大公约数。如果 a 或 b 之一非零,则 gcd(a, b) 的值是能同时整除 a 和 b 的最大正整数。gcd(0, 0) 返回 0

3.5 新版功能.

math.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) 。

IEEE 754特殊值 NaN , inf 和 -inf 将根据IEEE规则处理。具体来说, NaN 不被认为接近任何其他值,包括 NaN 。 inf 和 -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.ldexp(xi)

返回 x * (2**i) 。 这基本上是函数 frexp() 的反函数。

math.modf(x)

返回 x 的小数和整数部分。两个结果都带有 x 的符号并且是浮点数。

math.remainder(xy)

返回 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.trunc(x)

返回 Real 值 x 截断为 Integral (通常是整数)。 委托给 x.__trunc__()。

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

对于 ceil() , floor() 和 modf() 函数,请注意 所有 足够大的浮点数都是精确整数。Python浮点数通常不超过53位的精度(与平台C double类型相同),在这种情况下,任何浮点 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 中的减法可能导致 significant loss of precision; 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-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(xy)

将返回 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 的反余弦值。

math.asin(x)

以弧度为单位返回 x 的反正弦值。

math.atan(x)

以弧度为单位返回 x 的反正切值。

math.atan2(yx)

以弧度为单位返回 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.hypot(xy)

返回欧几里德范数, sqrt(x*x + y*y) 。 这是从原点到点 (x, y) 的向量长度。

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 处的 error function 。

erf() 函数可用于计算传统的统计函数,如 累积标准正态分布

def phi(x):'Cumulative distribution function for the standard normal distribution'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 的信息可参考 Vi Hart 的视频 Pi is (still) Wrong。吃两倍多的派来庆祝 Tau 日 吧!

3.6 新版功能.

math.inf

浮点正无穷大。 (对于负无穷大,使用 -math.inf 。)相当于``float('inf')`` 的输出。

3.5 新版功能.

math.nan

浮点“非数字”(NaN)值。 相当于 float('nan') 的输出。

3.5 新版功能.

CPython implementation detail: 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视为静默的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA安装配置SceneBuilder

1、下载 SceneBuilder 地址&#xff1a; Scene Builder - Gluon ​​​​​​​ Scene Builder | JavaFX中文官方网站 选择符合自己系统版本&#xff0c;JAVA版本的下载 2、安装SceneBuilder 执行下载的 SceneBuilder 安装程序&#xff0c;并按照安装向导的指示进行…

Linux内核分析(十四)--内存管理之malloc、free 实现原理

目录 一、引言 二、malloc实现方式 ------>2.1、动态内存分配的系统调用:brk / sbrk ------>2.2、malloc实现思路 ------------>2.2.1、最佳适应法 ------------>2.2.2、最差适应法 ------------>2.2.3、首次适应法 ------------>2.2.4、下一个适应…

701. 二叉搜索树中的插入操作

原题链接&#xff1a;701. 二叉搜索树中的插入操作 思路&#xff1a; 因为是二叉搜索树&#xff0c;我们可以利用这个特性来确定val到底是在那一边的子树&#xff0c;而不是全部遍历二叉搜索树 直接使用递归&#xff0c;如果查询到root为NULL&#xff0c;则直接创建新结点即可…

[linux] 由创建用户开始

用户创建 【添加用户】 方案一&#xff08;自动化添加&#xff09;&#xff1a;adduser <用户名> 后按提示设计密码、全名等 方案二&#xff08;个性化添加&#xff09;&#xff1a;useradd -m <用户名>&#xff0c; 设置密码 passwd <用户名>。当出现切换用…

Feign调用返回值统一处理

因为接口一般有固定的返回格式&#xff0c;有数据、返回码和异常时错误信息。 不做任何处理情况下&#xff0c;需要在调用Feign的业务代码处通过判断返回码来获取数据。这种重复的代码可以抽出来统一处理。 解决方法1 使用自定义Decoder来统一处理&#xff0c;重写Object de…

高防IP可以抵御哪些恶意攻击

高防IP协议可以隐藏用户的站点&#xff0c;使得攻击者无法发现恶意攻击的目标网络资源&#xff0c;从而提高了源站的安全性。能够有效抵御常见的恶意攻击类型ICMPFlood、UDPFlood、 TCPFlood、SYNFlood、ACKFlood等&#xff0c;帮助游戏、金 融、电子商务、互联网、政企等行业抵…

实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原

文/朱季谦 目录一、Elasticdump工具介绍二、Elasticdump工具安装三、Elasticdump工具使用 最近在开发当中做了一些涉及到Elasticsearch映射结构及数据导出导入的工作&#xff0c;怕以后会把这过程忘记&#xff0c;可谓好记性不如烂笔头&#xff0c;故而记录成一篇博文。 玩El…

CCF编程能力等级认证GESP—C++4级—样题1

CCF编程能力等级认证GESP—C4级—样题1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)第一题 绝对素数第二题 填幻方 参考答案单选题判断题编程题1编程题…

上海某公司医疗实施工程师笔试题

文章目录 一、Oracle数据库基础二、作为一个实施人员&#xff0c;用户如果提出我们软件功能所不具备的需求&#xff0c;你该如何处理&#xff1f;简单列出你可能采取的几种措施三、简答题三、答案1.Oracle数据库基础2.作为一个实施人员&#xff0c;用户如果提出我们软件功能所不…

基于mindspore的大模型llama2-7b---微调/推理

环境信息&#xff1a; 1.mindformers指导链接&#xff1a; https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/llama2.md#%E6%A8%A1%E5%9E%8B%E6%9D%83%E9%87%8D%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BD%AC%E6%8D%A2 2.镜像&#xff1a;mindformers0.8.0_ms2.2.0…

钉钉统计部门个人请假次数go

前言 最近小组需要统计部门各种请假次数&#xff0c;写了一个方法&#xff0c;第一次实战中用到递归函数&#xff0c;简单记录一下。 效果展示 这些数据不需要返回json&#xff0c;这里这样是为了方便测试。可以通过这些数据完成其它的操作。 功能实现 钉钉服务端调试工具A…

短剧公众号系统:连接创作者与观众的桥梁

随着数字媒体的迅速发展&#xff0c;短剧公众号系统作为一种新型的内容传播方式&#xff0c;逐渐在社交媒体平台上崭露头角。它通过将创作者与观众紧密连接&#xff0c;为双方提供了丰富的内容与互动体验。本文将探讨短剧公众号系统的价值&#xff0c;以及如何通过这种系统连接…

Java主流分布式解决方案多场景设计与实战

Java的主流分布式解决方案的设计和实战涉及到多个场景&#xff0c;包括但不限于以下几点&#xff1a; 分布式缓存&#xff1a;在Java的分布式系统中&#xff0c;缓存是非常重要的一部分。常用的分布式缓存技术包括Redis、EhCache等。这些缓存技术可以用来提高系统的性能和响应…

多个Obj模型合并

MergeObj&#xff08;合并Obj模型&#xff09; 1 概述 由于项目原因&#xff0c;需要下载谷歌地图上的模型&#xff0c;关于谷歌模型下载的&#xff0c;见我的CSDN博客. 由于下载谷歌地图上的数据&#xff0c;会分多个模块下载。下载完成后&#xff0c;怎么合并&#xff0c;在…

【数据结构初阶】链表OJ

链表OJ 题目一&#xff1a;移除链表元素题目二&#xff1a;反转链表题目三&#xff1a;链表的中间节点题目四&#xff1a;链表中倒数第k个结点题目五&#xff1a;合并两个有序链表题目六&#xff1a;链表分割题目七&#xff1a;链表的回文结构题目八&#xff1a;相交链表题目九…

B2B企业如何打造独立站:从策略到实施的全面指南

随着数字化转型的加速&#xff0c;B2B企业越来越认识到独立站的重要性。然而&#xff0c;如何建设一个优秀的独立站&#xff0c;以及如何将独立站与企业的整体战略相结合&#xff0c;是许多企业面临的挑战。本文将详细探讨B2B企业如何从策略到实施打造一个成功的独立站。 一、…

Pytorch自动混合精度的计算:torch.cuda.amp.autocast

1 autocast介绍 1.1 什么是AMP? 默认情况下&#xff0c;大多数深度学习框架都采用32位浮点算法进行训练。2017年&#xff0c;NVIDIA研究了一种用于混合精度训练的方法&#xff0c;该方法在训练网络时将单精度&#xff08;FP32&#xff09;与半精度(FP16)结合在一起&#xff…

2656. K 个元素的最大和 --力扣 --JAVA

题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次&#xff0c;最大化你的得分&#xff1a; 从 nums 中选择一个元素 m 。 将选中的元素 m 从数组中删除。 将新元素 m 1 添加到数组中。 你的得分增加 m 。 请你返回执行以上操作恰好 k …

【外贸干货】收到只有一句话的询盘该怎么回复?

外贸业务员收到询盘无疑是开心的事情&#xff0c;但收到的询盘多了&#xff0c;才知道“套路”也更深了。今天&#xff0c;我们将通过几个实际的询盘案例&#xff0c;来重点说一说当遇到一些简单笼统的询盘&#xff0c;甚至是只有一句话的询盘时&#xff0c;应该怎么办&#xf…

共享台球室小程序系统的数据统计与分析功能

随着共享经济的繁荣发展&#xff0c;共享台球室作为一种新型的娱乐方式&#xff0c;越来越受到年轻人的喜爱。为了更好地满足用户需求和提高管理效率&#xff0c;我们设计了一款基于微信小程序的共享台球室预订与管理系统。该系统不仅具备基本的预订和管理功能&#xff0c;还集…