本文主要介绍下在Python语言环境下对math库进行详细讲解,math库是标准算数运算函数的标准库,他也是Python的一个内置库,主要用来做科学计算使用。希望对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。
1 概述
Python的内置math库包含了很多函数计算,主要包括数学常量、通用(数论和表示函数)函数操作、幂函数和对数函数、三角函数、角度转换函数、双曲函数和特殊函数操作。python语言中的math库同Java语言一样,也是调用了C语言库。
- 数学常量计算:例如π、E等
- 通用函数操作计算:ceil()等
- 幂函数和对数函数计算:例如log()、pow()、sqrt()等
- 三角函数计算:例如cos()、sin()等
- 角度转换函数计算:degrees()、 radians()等
- 双曲函数计算:acosh()、asinh()、atanh()、cosh()、sinh()、tanh()等
- 特殊函数计算:gamma()、lgamma()等
2 math库实践
本文操作的版本为Python 3.10,其他的版本请查阅后操作。
$ python -V
Python 3.10.1
如果想要使用Python的内置math库,则需要引入math库后才可以使用库中的函数,例如
import math
2.1 数学常量计算
math库中有很多内置常量,例如pi、e、tau、inf、nan。
- e:自然对数,其数学计算值为2.718281828459045
- pi:圆周率π,其数学计算值为3.141592653589793
- tan:圆周率常数τ(2π),其数学计算值为6.283185307179586。使用版本>=3.6
- inf:浮点正无穷大,相对的是浮点负无穷大。使用版本>=3.5
- nan:非数字
代码如下:
import math
print(math.e)
print(math.pi)
print(math.tau)
print(math.inf)
print(math.nan)
执行结果如下:
2.2 通用函数操作计算
这也是python的math库中函数最多的一个分类。
- ceil(x):向上获取参数的最大整数。例如ceil(2.4)向上计算后,最大整数是3。
- comb(n, k):返回不重复且无顺序地从 n 项中选择 k 项的方式总数。当 n < k 时取值为零,当 n >= k 时取值为 n! / (k! * (n - k)!);
- copysign(x, y):返回一个基于 x 的绝对值和 y 的符号的浮点数
- fabs(x):求绝对值。
- factorial(x):求阶乘。例如3的阶乘为3*2*1=6。
- floor(x):向下获取参数的最大整数ceil(x)相反,与。例如ceil(2.4)向上计算后,最大整数是2。
- fmod(x, y):求余数。求得x除以y后的余数。
- frexp(x):以 (m, e) 对的形式返回 x 的尾数和指数。 m 是一个浮点数, e 是一个整数,正好是 x == m * 2**e 。参考函数ldexp(x, i)。
- fsumiterable:sum()函数的高精度形式。
- gcd(*Integer):给定数据的最大公约数。
- isclose 是否相近、isfinite 不是无穷、isinf 是否无穷大、isnan 非数字、isqrt 平方根取整(必须是整数):判断函数,简明释义。可以理解为判断,返回true和false或者具体的数据值。例如
print(math.isnan(2))
是否是 非数字。 - lcm(*integers):最小公倍数,在数学上面,同gcd(*Integer)是同一对。版本3.9+
- ldexp(x, i):返回 x * (2**i) 。 这基本上是函数 frexp() 的反函数。
- modf(x):获取x的小数和整数部分,都是浮点型。
- nextafter(x, y):返回 x 趋向于 y 的最接近的浮点数值。版本3.9+
- perm(n, k=None):返回不重复且有顺序地从 n 项中选择 k 项的方式总数。当 k <= n 时取值为 n! / (n - k)!;当 k > n 时取值为零。如果 k 未指定或为 None,则 k 默认值为 n 并且函数将返回 n!。
- prod(iterable, *, start=1):从1 开始,iterable 中所有元素的积。
- remainder(x, y):返回x 相对于 y 的余数。例如remainder(4, 3),则返回1;如果反过来则为-1。
- trunc(x):四舍五入方法的一种。去除小数部分的 x ,只留下整数部分。
- ulp(x):返回浮点数 x 的最小有效比特位的值,可以参考math.nextafter() 。
- 如果 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)。
代码如下:
import math
print(math.ceil(2.4))
print(math.comb(3, 4))
print(math.comb(4, 3))
print(math.copysign(2,3))
print(math.fabs(2))
print(math.fabs(-3))
print(math.factorial(3))
print(math.floor(2.4))
print(math.fmod(2, 3))
print(math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, 2]))
print(math.gcd(2,8,10))
print(math.isclose(2,3));
print(math.isfinite(1));
print(math.isinf(6));
print(math.isnan(2));
print(math.isqrt(4));
print(math.isqrt(8));
print(math.lcm(2,8,10))
print(math.ldexp(3,2))
print(math.modf(3.0918))
print(math.nextafter(3,2))
print(math.perm(6,3))
print(math.prod([2,3,6]))
print(math.remainder(4, 3))
print(math.trunc(3.87))
print(math.ulp(3.98))
print(math.ulp(-4))
执行结果如下:
2.3 幂函数和对数函数计算
在数学概念中,幂函数和对数函数是相对的,使用的比较少,大多数使用在一些大数据量的计算下,或者一些数学教学上面。
- math.exp(x):获取e的x次幂
- math.expm1(x):获取e的x次幂减1,参考math.exp(x)
- math.log(x):获取x的对数(底为e)
- math.log1p(1):获取1加x的自然对数(底为e)
- math.log10(x):x 底为10的对数
- math.pow(x,y):获取x的y次幂
- math.sqrt(x):获取x的平方根
代码演示:
import math
print(math.exp(3));
print(math.expm1(1e-5));
print(math.log(4));
print(math.log1p(10));
print(math.log10(3));
print(math.pow(2,4));
print(math.sqrt(9));
结果如下:
2.4 三角函数计算
在Python中,可以使用math模块来处理三角函数。math模块包含了许多常用的数学函数,包括三角函数。
- sin(x):计算x的正弦值,其中x是弧度值。
- cos(x):计算x的余弦值,其中x是弧度值。
- tan(x):计算x的正切值,其中x是弧度值。
- arcsin(x):计算x的反正弦值,返回弧度值。
- arccos(x):计算x的反余弦值,返回弧度值。
- arctan(x):计算x的反正切值,返回弧度值。
- atan2(y, x):以弧度为单位返回 atan(y / x) 。
- dist(p, q):返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。
- 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 范围之内。最后简单点就是:先计算它的所有参数的平方和,再返回该和的平方根。
代码演示:
import math
print(math.sin(30))
print(math.cos(45))
print(math.tan(60))
print(math.asin(0.5))
print(math.acos(0.5))
print(math.atan(1))
print(math.atan2(45, 0.5))
print(math.dist([0,1], [1,0]))
print(math.hypot(1,2,3,4,5,6,7,8,9,10))
结果展示:
2.5 角度和弧度转换函数计算
角度和弧度互相转换,这个我感觉可以放在三角函数的分类中,放在这里似乎是有些不合适。
- math.degrees(x):将角度 x 从弧度转换为度数。
- math.radians(x):将角度 x 从度数转换为弧度。
代码展示:
import math
print(math.degrees(0.5))
print(math.radians(30))
结果展示:
2.6 双曲函数计算
双曲函数的一些基本运算。
- math.acosh(x):返回x的反双曲余弦值
- math.asinh(x):返回x的反双曲正弦值
- math.atanh(x):返回x的反双曲正切值
- math.cosh(x):返回x的双曲余弦值
- math.sinh(x):返回x的双曲正弦值
- math.tanh(x):返回x的双曲正切值
代码展示:
import math
print(math.acosh(8))
print(math.asinh(5))
print(math.atanh(0.5))
print(math.cosh(87))
print(math.sinh(18))
print(math.tanh(0.897))
结果展示:
2.7 特殊函数计算
特殊函数都是在3.2版本增加进来的,后续的延续版本都存在这些函数。
- math.erf(x):输入值x的误差函数
- math.erfc(x):获取输入值x的互补误差函数
- math.gamma(x):获取输入值x的伽马函数值
- math.lgamma(x):获取伽马函数在输入值x的绝对值的自然对数,等价于math.log(math.fabs(math.gamma(-0.67)))
代码展示:
import math
print(math.erf(0.38))
print(math.erfc(0.38))
print(math.gamma(-0.38))
print(math.lgamma(-0.38))
结果展示:
3 总结
Math是Python中最常用的内置科学计算库,它为数据分析和数据科学计算提供了丰富的功能和灵活的定制选项。本文详细介绍了Math库的常用功能和应用场景,并通过实例演示了它在Python科学计算中的具体应用。
利用Math库,我们可以轻松的获取到科学计算的常量;还可以通过高阶函数针对三角函数、角度转换、曲线等进行计算;同时,Math还支持特殊函数计算,以满足更复杂的科学计算需求。
引用
- https://docs.python.org/zh-cn/3.10/library/math.html
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!