技术标签: python 数学 # Python 标准库、第三方库 Python
import math
math 为标准库下的模块,直接导入即可
常量部分源码
返回 圆周率 π = 3.141592…,精确到 小数点后 15 位
pi = math.pi
返回数学常数 e = 2.718281…,精确到 小数点后 15 位
e = math.e
返回数学常数 τ = 6.283185…,精确到 小数点后 15 位。
Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。
tau = math.tau
表示 浮点正无穷大 ,要表示负无穷大,得使用 -math.inf ,相当于 float(‘inf’)、float("-inf") 的输出
Positive_infinity = math.inf
Negative_infinity = -math.inf
表示 NaN : Not a Number(非数字) 代表不是一个数字,浮点数类型,相当于 float(‘nan’) 的输出,通常只用于表示缺少某些数据
返回 x 的上限值
x 为浮点数时则 向上取整,为整数时直接返回,不做任何更改
num1 = 5.668
num2 = 5
print(math.ceil(num1)) # 结果为 6
print(math.ceil(num2)) # 结果为 5
返回 x 的向下取整
x 为浮点数时则 向下取整,为整数时直接返回,不做任何更改
num1 = 5.668
num2 = 4
print(math.floor(num1)) # 结果为 5
print(math.floor(num2)) # 结果为 4
返回 不重复且无顺序地 从 n 项中选择 k 项的方式总数
当 k <= n 时取值为『n! / (k! * (n - k)!)』,当 k > n 时取值为零。也称为二项式系数,因为它等价于表达式 (1 + x) ** n 的多项式展开中第 k 项的系数。
图解
print(math.comb(4, 2)) # 结果为 6
如果任一参数不为整数则会引发 TypeError,如果任一参数为负数则会引发 ValueError。
copysign 从字面上理解,中文释义的为 “复制符号”
返回一个 基于** x 的绝对值** 和 y 的符号 的 浮点数,就是先获取 x 绝对值,再看 y 是什么符号,将 y 的符号给 x 的绝对值,x 可以是 整数 或则 浮点数,但最后返回的值为浮点数类型。
在支持 带符号 零(-0) 的平台上,copysign(1.0, -0.0) 返回 -1.0
print(math.copysign(6.6, -2)) # 结果为 -6.6
print(math.copysign(6.6, 2)) # 结果为 6.6
print(math.copysign(6.6, -2.6)) # 结果为 -6.6
print(math.copysign(6.6, 2.6)) # 结果为 6.6
print(math.copysign(5, -2.6)) # 结果为 -5.0
print(math.copysign(5, 2)) # 结果为 5.0
返回 x 的绝对值,x 可以是 整数 或者 浮点数,返回的值为浮点数类型
print(math.fabs(-6)) # 结果为 6.0
以 一个整数 返回 x 的阶乘,如果 x 不是整数 或为 负数 时则将引发 ValueError
print(math.factorial(4)) # 4的阶乘为 24
print(math.factorial(5)) # 5的阶乘为 120
取模,返回除法的余数,math.fmod(x, y) 与运算符 x % y 公式相同『 x - (x / y)*x 』,但区别在 (x / y) 上的取值方式不同,x % y 将 ( x / y) 的值向下取整,而 math.fmod(x, y) 将 (x / y) 的值向0取整
图解
print(3 % 2) # 结果为 1
print(math.fmod(3, 2)) # 结果为 1.0
print(-3 % 2) # 结果为 1
print(math.fmod(-3, 2)) # 结果为 -1.0
math.fmod 返回的是浮点数类型
以 (m, e) 对的形式返回 x 的 尾数 和 指数,其算式为 『 x == m * 2**e 』 ,本质是 以 2为基数 的科学计数法, m 是一个浮点数, e 是一个整数
如果 x 为零,则返回 (0.0, 0) ,否则返回 0.5 <= abs(m) < 1
print(math.frexp(300)) # 结果为 (0.5859375, 9)
print(math.frexp(-300)) # 结果为 (-0.5859375, 9)
print(0.5859375 * 2 ** 9) # 0.5859375为尾数,2为基数,9为指数
iterable 为一个可迭代对象,如:列表、元组、集合,将数组内的值进行求和计算,此方法功能与 内置函数sum() 相同,但比 sum() 能获取计算精确浮点值,返回的求和值为 浮点数类型。
print(sum([0.1] * 10)) # 结果为 0.9999999999999999
print(math.fsum([0.1] * 10)) # 结果为 1.0
print(math.fsum([6, 60])) # 结果为 66.0
返回 a 和 b 的 最大公约数,a 和 b 只能是整数,gcd(0, 0) 返回 0。
print(math.gcd(18, 66)) # 结果为 6
print(math.gcd(6, 7)) # 结果为 1
print(math.gcd(0, 6)) # 结果为 6
print(math.gcd(0, 0)) # 结果为 0
若 a 和 b 的值 比较接近则返回 True,否则返回 False,根据给定的 绝对 和 相对 容差确定两个值是接近。
判断是否接近的公式为: abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
abs() 函数返回数字的绝对值。
max() 方法返回给定参数的最大值,参数可以为序列。
图解
print(math.isclose(50, 52.6, rel_tol=0.05)) # 结果为 True
print(math.isclose(50, 52.7, rel_tol=0.05)) # 结果为 False
具体来说, NaN 不被认为接近任何其他值,包括 NaN,inf 和 -inf 只被认为接近自己
print(math.isclose(math.nan, math.nan)) # 结果为 False
print(math.isclose(math.inf, math.inf)) # 结果为 True
print(math.isclose(math.inf, -math.inf)) # 结果为 False
判断 x 是否为 正或负无穷大,是则返回 True ,否则返回 False
print(math.isinf(float("inf"))) # 结果为 True
print(math.isinf(math.inf)) # 结果为 True
print(math.isinf(-math.inf)) # 结果为 True
print(math.isinf(66)) # 结果为 False
判断 x 是否为 NaN,是则返回 True ,否则返回 False
NaN : Not a Number(非数字) 代表不是一个数字,浮点数类型
print(math.isnan(float("nan"))) # 结果为 True
print(math.isnan(math.nan)) # 结果为 True
print(math.isnan(6)) # 结果为 False
判断 x 是否为有限的,如果 x 既 不是无穷大 也 不是NaN,则返回 True ,否则返回 False
print(math.isfinite(0.0)) # 结果为 True
print(math.isfinite(10 ** 100)) # 结果为 True
print(math.isfinite(float("inf"))) # 结果为 False
print(math.isfinite(math.inf)) # 结果为 False
print(math.isfinite(math.nan)) # 结果为 False
返回 非负整数 n 的 整数平方根,对 n 的实际平方根向下取整
print(math.isqrt(9)) # 结果为 3
print(math.isqrt(6)) # 结果为 2
print(math.isqrt(3)) # 结果为 1
print(1 + math.isqrt(3 - 1)) # 先上取整写法
如果 n 为负数,会抛出ValueError异常
返回 x * (2 ** i) 的 浮点数值 , 这基本上是函数 frexp() 的反函数
x = 66
m, i = math.frexp(x) # m为尾数,i为指数
print(math.ldexp(m, i) == x) # 结果为 True
返回 x 的 小数、整数 部分的数组,相当于对小数点前后进行了拆分,返回的值都 带有 x的符号,且都是浮点数类型
x = math.modf(5.6)
print(x) # 小数部分存在精确不足的问题
print(round(x[0], 1), x[-1]) # 可以使用round() 解决
(0.5999999999999996, 5.0)
0.6 5.0
返回不重复且有顺序地从 n 项中选择 k 项的方式总数,此方法类似于 comb(),但内部算式不同
当 k <= n 时取值为 『n! / (n - k)! 』;当 k > n 时取值为零。
图解
print(math.comb(4, 2)) # 结果为 6
print(math.perm(4, 2)) # 结果为 12
如果 k 未指定或为 None,则 k 默认值为 n 并且函数将返回 n!(n 的阶乘)
print(math.perm(4, 4))
print(math.perm(4))
24
24
如果任一参数不为整数则会引发 TypeError。 如果任一参数为负数则会引发 ValueError。
计算输入的 iterable 中所有元素的 积
类似于 内置函数 sum(iterable, start=0),将 iterable 中所有元素求和,再加上 start
print(math.prod([1, 2, 3, 4, 5, 6])) # 结果为 720
print(math.prod([1, 2, 3, 4, 5, 6], start=0.5)) # 结果为 360.0
当可迭代对象为空时,返回起始值
print(math.prod([])) # 结果为 1
返回 x 相对于 y 的余数,对于有限 x 和有限非零 y ,计算公式为: x - n * y ,其中 n 为 x / y 的精确值最接近的整数 (应该是四舍五入)
print(math.remainder(3, 2))
print(math.remainder(6, 4))
print(math.remainder(6, 5))
-1.0
-2.0
1.0
remainder(x, math.inf) 对于任何有限 x 都是直接返回 x
print(math.remainder(6, math.inf)) # 结果为 6.0
remainder(x, 0) 和 remainder(math.inf, x) 引发 ValueError
截取 x 的整数部分并返回
print(math.trunc(6.66666666666666666)) # 结果为6
print(math.trunc(623e-2)) # 科学计数法,实则6.23
print(math.trunc(6.0)) # 结果为6
print(math.trunc(6)) # 结果为6
返回 e 次 x 幂,其中 e = 2.718281… 是自然对数的基数。这通常比 math.e ** x 或 pow(math.e, x) 更精确。
返回 e 的 x 次幂,减1。这里 e 是自然对数的基数。对于小浮点数 x , exp(x) - 1 中的减法可能导致 significant loss of precision; expm1() 函数提供了一种将此数量计算为全精度的方法:
使用一个参数,返回 x 的自然对数(底为 e )。
使用两个参数,返回给定的 base 的对数 x ,计算为 log(x)/log(base) 。
返回 1+x (base e) 的自然对数。以对于接近零的 x 精确的方式计算结果。
返回 x 以2为底的对数。这通常比 log(x, 2) 更准确。
返回 x 底为10的对数。这通常比 log(x, 10) 更准确。
将返回 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() 函数来计算精确的整数幂。
返回 x 的平方根。
以弧度为单位返回 x 的反余弦值。
以弧度为单位返回 x 的反正弦值。
以弧度为单位返回 x 的反正切值。
以弧度为单位返回 atan(y / x) 。结果是在 -pi 和 pi 之间。从原点到点 (x, y) 的平面矢量使该角度与正X轴成正比。 atan2() 的点的两个输入的符号都是已知的,因此它可以计算角度的正确象限。 例如, atan(1) 和 atan2(1, 1) 都是 pi/4 ,但 atan2(-1, -1) 是 -3*pi/4 。
返回 x 弧度的余弦值。
返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。
文章浏览阅读664次。改了这些配置,发现还是连不上。于是:2. 生成jupyter配置文件此时会提示生成一个文件在 进入python环境后输入会提示输入密码(自己随意设置一个就好,记下来,一会会用到),确认密码,之后会返回一个序列在这里密码记为‘shal:5d429542e711…’打开刚刚生成的文件 (注意它在隐藏目录.jupyter/里)在末尾加上4. 启动jupyter输入命令建议在根目录(如/home/name/)下输入例如会显示注意红色框出了返回的一个地址,这个地址6000代表刚刚设置的_conda安装jupyter notebook设置密码
文章浏览阅读158次。参考此链接:https://zhuanlan.zhihu.com/p/61228593_unbtunxiazaiman
文章浏览阅读7.5w次,点赞15次,收藏6次。python3.6在安装后,在安装目录下并没有对应的unstall程序,为了删除python3.6,可以重新执行安装文件,这时候安装程序中会多出一个unstall的选项,选择unstall即可顺利卸载python。_wsl remove python
文章浏览阅读1.7k次。修改el-radio的选中样式_el-radio选中样式
文章浏览阅读705次。菜鸟教程来源:Java建设者(id:javajianshe)作者:cxuan1. 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。2. shel..._如果与用户的链接相对较近,则可以将其指定为
文章浏览阅读249次。delphi怎么连接oracle(服务器在本地IP:127.0.0.1) Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061218083334247.html如题。找了些远程服务器的文档来看,可怎么也不对呀SID:myoracle你用ADO还是用ODAC连接oracle数据库呀用ADO:第一步:...
文章浏览阅读855次。1、塔奇克马2、机器人瓦力3.马文http://www.guokr.com/post/683881/_阿斯特云ai机器人引擎
文章浏览阅读1.1k次,点赞4次,收藏8次。21个项目玩儿转Tensorflow的BUG记录使用环境win10+Python3.6+Tensorflow1.4。BUG历程第三章,运行data_convert.py出现错误:Traceback (most recent call last): File "E:/03personal/DeepLearning/03IMG/data_prepare/data_convert.py", ..._the backend was *originally* set to 'qt5agg' by the following code:
文章浏览阅读1.5k次。ACL(访问控制列表)是应用在路由器接口的指令列表。这些指令列表用来告诉路由器,那些数据包可以接收,那些数据包需要拒绝。基本原理为:ACL使用包过滤技术,在路由器上读取OSI七层模型的第三层及第四层包头中的信息,如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制的目的。ACL通过在路由器接口处控制数据包是转发还是丢弃来过滤通信流量。路由器根据ACL中..._acl模型的缺点
文章浏览阅读7.2k次。selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable改:click_all = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-fastfilter button:first-child')))为:click_all = wait.until(EC.element_to_be_clicka_"by.css_selector, \"[.el-message__content]"
文章浏览阅读4.4k次,点赞4次,收藏20次。最近半年Scratch官网发生了一些众所周知的情况,但是这个软件本身还是很优秀的。少儿图形化编程的主流还是Scratch。但是我们还是决定改个名字,叫Kidsline,意为 “孩子的代码”。对软件的二次开发仍然只是 “微调”,尽可能原汁原味,同时带一点点不经意的惊喜。关于二次开发的技术细节,可以参考我之前的文章。就我们收集的信息来看,原版软件字体太小是个核心痛点,此次升级对字体也做了更统一的优化,同时增加了Python代码的生成,孩子在学习时可以参考。整个软件就是站在各个巨人的肩膀上完成的,Kidsl
文章浏览阅读229次。mac 安装beego1.11go1.13.9 事先已经安装好beego1.11安装beego env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,directgo get -u github.com/astaxie/beegogo get -u github.com/beego/bee过程如下 go/bin下面有bee了# 加入环境变量cp ~/.zshrc ~/.zshrc.bakecho 'expor_go install beego1.11