Python标准库-math
Python 的标准函数“math”提供了许多常用的数学函数,例如三角函数、四舍五入、指数、对数、平方根、总和等,都可以通过 math 标准函数来进行运算。
math 常用方法
下方列出几种 math 模块常用的方法:
方法 | 参数 | 说明 |
---|---|---|
pi、math.e | ||
圆周率与指数(数学常数) | ||
ceil() | x | 无条件进位到整数 |
floor() | x | 无条件舍去到整数 |
copysign() | x, y | 根据 y 的正负符号,改变 x 绝对值后的正负值 |
fabs() | x | 返回 x 的绝对值(浮点数) |
fmod() | x, y | 返回 x 除以 y 的余数(浮点数) |
fsum() | iter | 返回可迭代数值的加总(浮点数) |
gcd() | x, y | 返回 x 和 y 的最大公约数 |
pow() | x, y | 返回 x 的 y 次方 |
sqrt() | x | 返回 x 的平方根 |
factorial() | x | 返回 x 的阶乘(x!,仅限正整数) |
degrees()、math.radians() | x | 将角度转为弧度,或将弧度转为角度 |
sin()、math.cos()、math.tan() | x | 返回 x 弧度的正弦值、余弦值、正切值 |
asin()、math.acos()、math.atan() | x | 返回 x 弧度的反正弦值、反余弦值、反正切值 |
exp() | x | 返回 e 常数的 x 次方 |
log()、math.log1p()、math.log2()、math.log10() | x | 返回自然对数 |
isclose() | x, y, *, rel_tol, abs_tol | 判断 x 和 y 是否够接近,返回 True 或 False |
isfinite()、math.isinf() | x | 判断 x 是否为无限大的数字,返回 True 或 False |
isnan() | x | 判断 x 是否为 NaN,返回 True 或 False |
要使用 math 必须先 import math 模块,或使用 from 的方式,单独 import 特定的模块。
import math
from math import sin
pi、math.e
math.pi 使用后会返回 圆周率 的数学常数,math.e 使用后会返回 指数 的数学常数(常数表示固定不变的数字)。
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
ceil(x)
math.ceil(x) 使用后会将小数点后方的数字,无条件进位到整数,以下方的程序为例,圆周率 3.14159 无条件进位后就等于 4(单纯四舍五入可使用内置函数 round,参考:round(x, y))。
import math
pi = math.pi
print(math.ceil(pi)) # 4
floor(x)
math.floor(x) 使用后会将小数点后方的数字,无条件舍去到整数,以下方的程序为例,圆周率 3.14159 无条件舍去后就等于 3(单纯四舍五入可使用内置函数 round,参考:round(x, y))。
import math
pi = math.pi
print(math.floor(pi)) # 3
copysign(x, y)
math.copysign(x, y) 使用后,会 根据 y 的正负符号,改变「x 绝对值」之后正负值。
import math
print(math.copysign(10, -5)) # -10
print(math.copysign(-10, 9)) # 10
print(math.copysign(-10, -3)) # -10
fabs(x)
math.fabs(x) 使用后会 返回 x 的绝对值,计算结果以浮点数 float 格式呈现。
import math
print(math.fabs(-10)) # 10.0
fmod(x, y)
math.fmod(x, y) 使用后会返回 x 除以 y 的余数,计算结果以浮点数 float 格式呈现,如果要返回整数,可使用 Python 数学计算 x % y 的语法。
import math
print(math.fmod(7,3)) # 1.0
fsum(iter)
math.fsum(iter) 使用后会 返回串列或 tuple 里的数值加总,计算结果以浮点数 float 格式呈现。
import math
print(math.fsum([1,2,3,4,5])) # 15.0
print(math.fsum((1,2,3,4,5))) # 15.0
gcd(x, y)
math.gcd(x, y) 使用后会返回 x 和 y 的最大公约数(同时可以整除 x 和 y 的最大整数)。
import math
print(math.gcd(18,12)) # 6
pow(x, y)
math.pow(x, y) 会返回 x 的 y 次方,计算结果以浮点数 float 格式呈现(如果需要整数,可参考内置函数 pow(x, y, z))。
import math
print(math.pow(2, 5)) # 32.0
sqrt(x)
math.sqrt(x) 会返回 x 的平方根,计算结果以浮点数 float 格式呈现。
import math
print(math.sqrt(16)) # 4.0
factorial(x)
math.factorial(x) 会 返回 x 的阶乘(x!),x 只能使用正整数。
import math
print(math.factorial(5)) # 120 ( 5x4x3x2x1=120 )
degrees(x)、math.radians(x)
math.degrees(x) 将 x 弧度转换为角度,math.radians(x) 将 x 角度转换为弧度。
import math
print(math.radians(30)) # 0.5235987755982988
print(math.degrees(0.5236)) # 30.0000701530499
sin(x)、math.cos(x)、math.tan(x)
math.sin(x) 返回 x 弧度的正弦值,math.cos(x) 返回 x 弧度的余弦值,math.tan(x) 返回 x 弧度的正切值(1 弧度等于 180 度/π)。
import math
r = math.radians(30) # 将 30 度转换为弧度
print(math.sin(r)) # 0.49999999999999994
print(math.cos(r)) # 0.8660254037844387
print(math.tan(r)) # 0.5773502691896257
asin(x)、math.acos(x)、math.atan(x)
math.asin(x) 返回 x 弧度的反正弦值,math.acos(x) 返回 x 弧度的反余弦值,math.atan(x) 返回 x 弧度的反正切值(1 弧度等于 180 度/π)。
import math
r = math.radians(30) # 将 30 度转换为弧度
print(math.asin(r)) # 0.5510695830994463
print(math.acos(r)) # 1.0197267436954502
print(math.atan(r)) # 0.48234790710102493
exp(x)
math.exp(x) 会返回 e 常数的 x 次方。
import math
print(math.exp(2)) # 7.38905609893065
log(x)、math.log1p(x)、math.log2(x)、math.log10(x)
math.log 相关的模块,可以返回对应的自然对数。
自然对数模块 | 说明 |
---|---|
math.log(x) | 返回 x 的自然对数(底为 e) |
math.log(x, base) | 返回 log(x)/log(base) |
math.log1p(x) | 返回 1+x 的自然对数(底为 e) |
math.log2(x) | 返回 x 以 2 为底的自然对数 |
math.log10(x) | 返回 x 以 10 为底的自然对数 |
import math
print(math.log(10)) # 2.302585092994046
print(math.log(10,3)) # 2.095903274289385
print(math.log1p(10)) # 2.3978952727983707
print(math.log2(10)) # 3.321928094887362
print(math.log10(10)) # 1.0
isclose(x, y, rel_tol, abs_tol)
math.isclose 可以根据 判断 x 和 y 是否够接近,「够接近」的定义在于 x 和 y 的差异是否大于某个数值,如果够接近就返回 True,否则返回 False。
下面的例子,在没有设定 rel_tol 和 abs_tol 参数的状况下,除非 x 和 y 相等,否则都是「不够接近」。
import math
print(math.isclose(3.14, 3.14)) # True
print(math.isclose(3.14000, 3.14001)) # False
rel_tol 参数定义「相对的接近范围」,公式为 「 x 和 y 的最大值乘以 rel_tol」,下方的例子,10 和 5 的接近范围最大是 10x0.5=5,因此如果 10-4 比 5 大,就会返回 False (不接近),同理,10 和 20 的接近范围最大会是 20x0.5=10,如果 20-9 比 10 大,就会返回 False。
import math
print(math.isclose(10, 5, rel_tol=0.5)) # True
print(math.isclose(10, 4, rel_tol=0.5)) # False
print(math.isclose(20, 10, rel_tol=0.5)) # True
print(math.isclose(20, 9, rel_tol=0.5)) # False
abs_tol 参数定义「绝对的接近范围」,公式为 「 x-y 的绝对值」,下方的例子,10.4-10=0.4,0.4 小于 abs_tol 定义的 0.5,表示接近,返回 True。
import math
print(math.isclose(10, 10.4, abs_tol=0.5)) # True 0.4<0.5
print(math.isclose(10, 10.6, abs_tol=0.5)) # False 0.6>0.5
isfinite(x)、math.isinf(x)
math.isfinite(x) 和 math.isinf(x) 能判断 x 是否为无限大的数字,返回 True 或 False。
import math
a = float('inf')
print(math.isfinite(a)) # False a 是无限大,返回 False
print(math.isinf(a)) # True a 是无限大,返回 true
isnan(x)
math.isnan(x) 能判断 x 是否为 NaN (非数字),返回 True 或 False。
import math
a = float('nan')
print(math.isnan(a)) # True
print(math.isnan(123)) # False
转载自:https://juejin.cn/post/7393688446038933538