- images
- results
- .gitignore
- 1.1概论.ipynb
- 1.2 环境配置.pdf
- 1.3数据类型.ipynb
- 1.4 人机交互.ipynb
- 1.5 对象与变量.ipynb
- 1.6 编码与命名规范.ipynb
- 2.1 数值类型.ipynb
- 2.2 数值类型转换.ipynb
- 2.3 数值元算.ipynb
- 2.4常用数学运算函数.ipynb
- 2.5 math 模块及其应用.ipynb
- 2.6.1 逻辑值测试.ipynb
- 2.6.2 成员运算.ipynb
- 2.6.3 比较运算.ipynb
- 2.6.4 布尔运算.ipynb
- 2.6.5 运算优先级.ipynb
- 2.ipynb
- 3.1 流程控制结构.ipynb
- 3.3.1 for 循环语句.ipynb
- 3.3.3 rang.ipynb
- 3.3.3 while 循环语句.ipynb
- 3.4 and 3.5 分支结构和条件.ipynb
- 3.6 and 3.7 .ipynb
- 3.9 异常处理.ipynb
- 4 函数和模块化编程.ipynb
- 4.1 函数的定义、调用与返回值.ipynb
- 4.2 函数的参数传递.ipynb
- 4.3 变量的作用域.ipynb
- 4.4 匿名函数.ipynb
- 4.5 递归.ipynb
- 4.6 内置函数.ipynb
- 4.7 模块化程序设计.ipynb
- 5.1 序列通用操作.ipynb
- 5.1.1 索引.ipynb
- 5.1.2 切片.ipynb
- 5.1.3 序列拼接与重复.ipynb
- 5.1.4 成员测试.ipynb
- 5.2.1 字符串的创建.ipynb
- 5.2.2 字符串常量.ipynb
- 5.2.4 字符串的遍历.ipynb
- 5.2.5 文件遍历.ipynb
- 5.2.6 字符串的处理方法.ipynb
- 5.2.7 字符串格式化.ipynb
- 5.2.8 转义字符.ipynb
- 5.3 random 模块及其应用.ipynb
- 6.1 元组.ipynb
- 6.2 列表.ipynb
- 6.2.1 列表的创建.ipynb
- 6.2.2 列表的更新.ipynb
- 6.2.3 列表的删除.ipynb
- 6.2.4 列表的排序.ipynb
- 6.2.5 列表赋值与复制.ipynb
- 6.2.6 列表推导式.ipynb
- 6.2.8 常用内置函数.ipynb
- 6.2.9 列表嵌套及其排序.ipynb
- 6.3 列表综合应用.ipynb
- 7.1.1 集合的创建.ipynb
- 7.1.2可变集合类型的操作.ipynb
- 7.1.3 成员关系.ipynb
- 7.1.4 集合关系.ipynb
- 7.1.5 集合运算.ipynb
- 7.2.1 字典创建.ipynb
- 7.2.2 获取字典值.ipynb
- 7.2.3 修改字典值.ipynb
- 7.2.4内置函数与方法.ipynb
- 7.2.5字典排序输出.ipynb
- 7.3 集合与字典的应用.ipynb
- 8 中 numpy 概述.ipynb
- 8 中panda 库.ipynb
- 8.1 文件的打开与关闭.ipynb
- 8.2 文件读写操作.ipynb
- 8.3 文件的应用.ipynb
- 8.4 numpy 文件操作.ipynb
- 8.4.2 and 3.ipynb
- 8.5.1 pandas文件读写.ipynb
- 8.5.2 and 3 and 4.ipynb
- 9.1 matplotlib 线性图.ipynb
- 9.1.5 数据文化绘图.ipynb
- 9.2 非线性图.ipynb
- 9.3 词云.ipynb
- _overview.md
- _readme.ipynb
- coding_here.ipynb
- dream.png
- score.txt
- score_total.csv
- 成绩分析综合.json
2.5 math 模块及其应用.ipynb @master — view markup · raw · history · blame
math模块及其应用¶
__模块(module)__是 Python 中非常重要的东西,可以把它理解为 Python 的扩展工具,可提供面向特定领域或方向的程序功能。Python 安装好之后,默认安装了一些模块,称为__“标准库”__,“标准库”中的模块__不需要安装__,就可以直接使用。
没有纳入标准库的模块,需要使用 __“pip install模块名”__安装之后才能使用。</font>
</font>
在数学运算之中,除了加、减、乘、除运算之外,还有其它更多的运算,比如乘方、开方、对数运算等等,要实现这些运算,可以使用Python 中的__math模块__。该模块是内置模块,不需要安装,可直接使用。
Python中导入模块的方法有两种:
- 导入模块名
此时,程序可以调用模块名中的__所有函数__,语法表示如下:
调用模块中函数时,需明确指出函数所在的模块的名称,格式如下:
import math # 导入math模块,引用其中的函数时需要用在函数名前面加“math.”
print(math.pi) # 输出math模块中的pi值3.141592653589793
print(math.sqrt(5)) # 调用math模块中的sqrt函数求解5的平方根并输出
若调用模块中函数时,__未指出函数所在的模块__的名称,将抛异常。</font>
import math
print(pi) # 未指明模块名,抛未定义异常
- 直接导入库中的__函数__
可以同时引用多个函数,各函数间用逗号分隔,也可以用通配符“*”代替,表示引入该为中的所有函数,语法表示如下:
此时,调用该库的函数时不需要指明函数所在库的名称,格式如下:
<函数名 >(<函数参数 >)
from math import pi,sqrt # 导入math中的常数pi和sqrt()函数,直接引用函数名
print(pi) # 输出math模块中的pi值3.141592653589793
print(sqrt(5)) # 调用math模块中的sqrt函数求解5的平方根并输出
from math import * # 导入math中的所有函数,直接引用函数名
print(pi) # 输出math模块中的pi值3.141592653589793
print(sqrt(5)) # 调用math模块中的sqrt函数求解5的平方根并输出
一般程序较简单时,只引入一个库或所引用的函数仅在一个库中存在时,两种方法都可以使用。
当编写的程序较复杂、__引用多个库时__,可能在多个库中存在同名函数,而这些同名函数功能可能不同。这时建议使用__第一种方法__,明确指出所引用的函数来自于哪个库,以免出现错误。
math库中包括:
24个数论与表示函数
10个幂和对数函数
9个三角函数
6个双曲函数
2个角度转换函数
4个特殊函数
5个数学常量
24个数论与表示函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | ceil(x) | 返回 x 的向上取整,即大于或等于 x 的最小的整数 |
| 2 | comb(n, k) | 返回不重复且无顺序地从 n 项中选择 k 项的方式总数 |
| 3 | copysign(x, y) | 返回一个基于 x 的绝对值和 y 的符号的浮点数。在支持带符号零的平台上,copysign(1.0, -0.0) 返回 -1.0. |
| 4 | fabs(x) | 返回 x 的绝对值 |
| 5 | factorial(x) | 以一个整数返回 x 的阶乘。 |
| 6 | floor(x) | 返回 x 的向下取整,小于或等于 x 的最大整数。 |
| 7 | fmod(x, y) | 返回 fmod(x, y) |
| 8 | frexp(x) | 以 (m, e) 对的形式返回 x 的尾数和指数 |
| 9 | fsum(iterable) | 返回迭代中的精确浮点值 |
| 10 | gcd(*integers) | 返回给定的整数参数的最大公约数 |
| 10 | isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) | 若 a 和 b 的值比较接近则返回 True,否则返回 False |
| 12 | isfinite(x) | 如果 x 既不是无穷大也不是NaN,则返回 True ,否则返回 False |
| 13 | isinf(x) | 如果 x 是正或负无穷大,则返回 True ,否则返回 False |
| 14 | isnan(x) | 如果 x 是 NaN(不是数字),则返回 True ,否则返回 False |
| 15 | isqrt(n) | 返回非负整数 n 的整数平方根。 这就是对 n 的实际平方根向下取整,或者相当于使得 a² ≤ n 的最大整数 a。 |
| 16 | lcm(*integers) | 返回给定的整数参数的最小公倍数 |
| 17 | ldexp(x, i) | 返回 x * (2**i) 。 这基本上是函数 frexp() 的反函数。 |
| 18 | modf(x) | 返回 x 的小数和整数部分。两个结果都带有 x 的符号并且是浮点数 |
| 19 | nextafter(x, y) | 返回 x 趋向于 y 的最接近的浮点数值 |
| 20 | perm(n, k=None) | 返回不重复且有顺序地从 n 项中选择 k 项的方式总数 |
| 21 | prod(iterable, *, start=1) | 计算输入的 iterable 中所有元素的积。 积的默认 start 值为 1。 |
| 22 | remainder(x, y) | 返回 IEEE 754 风格的 x 相对于 y 的余数。对于有限 x 和有限非零 y ,这是差异 x - n*y ,其中 n 是与商 x / y 的精确值最接近的整数。如果 x / y 恰好位于两个连续整数之间,则将最接近的 偶数 用作 n 。 |
| 23 | trunc(x) | 返回去除小数部分的 x ,只留下整数部分。 |
| 24 | ulp(x) | 返回浮点数 x 的最小有效比特位的值 |
10个幂和对数函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | cbrt(x) | 返回 x的立方根(3.11新增) |
| 2 | exp(x) | 返回 e 次 x 幂,其中 e = 2.718281... 是自然对数的基数。这通常比 math.e ** x 或 pow(math.e, x) 更精确。 |
| 3 | exp2(x) | 返回 2 的x次幂(3.11新增) |
| 4 | expm1(x) | 返回 e 的 x 次幂,减1。这里 e 是自然对数的基数。 |
| 5 | log(x[, base]) | 使用一个参数,返回 x 的自然对数(底为 e ) |
| 6 | log1p(x) | 返回 1+x 的自然对数(以 e 为底)。 以对于接近零的 x 精确的方式计算结果。 |
| 7 | log2(x) | 返回 x 以2为底的对数。这通常比 log(x, 2) 更准确。 |
| 8 | log10(x) | 返回 x 底为10的对数。这通常比 log(x, 10) 更准确 |
| 9 | pow(x, y) | 将返回 x 的 y 次幂, pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0 |
| 10 | sqrt(x) | 返回 x 的平方根 |
9个三角函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | acos(x) | 返回以弧度为单位的 x 的反余弦值。 结果范围在 0 到 pi 之间 |
| 2 | asin(x) | 返回以弧度为单位的 x 的反正弦值。 结果范围在 -pi/2 到 pi/2 之间 |
| 3 | atan(x) | 返回以弧度为单位的 x 的反正切值。 结果范围在 -pi/2 到 pi/2 之间 |
| 4 | atan2(y, x) | 以弧度为单位返回 atan(y / x) 。结果是在 -pi 和 pi 之间 |
| 5 | cos(x) | 返回 x 弧度的余弦值 |
| 6 | dist(p, q) | 返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。 |
| 7 | hypot(*coordinates) | 返回欧几里得范数,sqrt(sum(x**2 for x in coordinates))。 这是从原点到坐标给定点的向量长度 |
| 8 | sin(x) | 返回 x 弧度的正弦值 |
| 9 | tan(x) | 返回 x 弧度的正切值 |
6个双曲函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | acosh(x) | 返回 x 的反双曲余弦值 |
| 2 | asinh(x) | 返回 x 的反双曲正弦值 |
| 3 | atanh(x) | 返回 x 的反双曲正切值 |
| 4 | cosh(x) | 返回 x 的双曲余弦值 |
| 5 | sinh(x) | 返回 x 的双曲正弦值 |
| 6 | tanh(x) | 返回 x 的双曲正切值 |
2个角度转换函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | degrees(x) | 将角度 x 从弧度转换为度数 |
| 2 | radians(x) | 将角度 x 从度数转换为弧度 |
4个特殊函数¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | erf(x) | 返回 x 处的 error function |
| 2 | erfc(x) | 返回 x 处的互补误差函数 |
| 3 | gamma(x) | 返回 x 处的 伽马函数 值 |
| 4 | lgamma(x) | 返回Gamma函数在 x 绝对值的自然对数 |
5个数学常量¶
| 序号 | 函数或常量 | 描述与示例 |
|---|---|---|
| 1 | pi | 数学常数 π = 3.141592653589793,精确到可用精度 |
| 2 | e | 数学常数 e = 2.718281828459045,精确到可用精度 |
| 3 | tau | 数学常数 τ = 6.283185307179586,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。 |
| 4 | inf | 浮点正无穷大 |
| 5 | nan | 一个浮点的 "非数字"(NaN)值。使用 isnan() 函数来测试 NaN,而不是 is 或 == |
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
print(math.tau) # 6.283185307179586
这些函数一般都是对C语言库中同名函数进行简单封装,仅支持整数和浮点数,__不支持复数运算__。
如果需要复数支持,可以使用cmath模块。
下面对其中较常用的函数做简单说明,其他情况可参考官方文档https://docs.python.org/zh-cn/3/library/math.html 。
- ### 数学常量 ###### math.pi:返回圆周率常数π值 ###### math.e:返回自然常数e值
import math
print(math.pi)
print(math.e)
- ### 数论与表示函数
math.fabs(x):以浮点数形式返回x的绝对值。¶
import math
print(math.fabs(-6)) # 返回浮点型的绝对值,输出6.0
math.factorial(x):返回x的阶乘,要求x为非负整数,x为负数或浮点数时返回错误。¶
print(math.factorial(6)) # 返回6!,输出720
print(math.factorial(-6)) # 参数为负数,抛异常
print(math.factorial(6.5)) # 参数为浮点,抛异常
math.fsum(iterable)):返回浮点数迭代求和的精确值,避免多次求和导致精度损失。¶
print(sum([.1, .1,.1, .1, .1, .1, .1, .1, .1, .1]))
print(math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]))
math.gcd(*integers):返回给定的整数参数的最大公约数。¶
如果参数之一非零,则返回值将是能同时整除所有参数的最大正整数。
如果所有参数为零或无参数,则返回值为 0。
在 3.9 版后添加了对任意数量的参数的支持,3.8版本或之前只支持两个参数。
print(math.gcd(88, 44)) # 返回2个值的最大公约数,输出44
print(math.gcd(88, 44, 22)) # 返回3个值的最大公约数(3.9新增),输出22
print(math.gcd(88, 44, 0)) # 返回值是能同时整除所有参数的最大正整数,输出44
print(math.gcd(0, 0)) # 如果所有参数为零或无参数,则返回值为0
print(math.gcd())
math.lcm(*integers):返回给定的整数参数的最小公倍数。(3.9版新增函数)¶
如果所有参数均非零,则返回值将是为所有参数的整数倍的最小正整数。
如果参数之一为零,则返回值为 0。
不带参数的 lcm() 返回 1。
print(math.lcm(5, 44, 22)) # 返回3个值的最小公倍数,输出220
print(math.lcm(22, 44, 0)) # 如果参数之一为0,返回值为0
print(math.lcm(0, 0))
print(math.lcm()) # 无参数时,返回值为1
math.prod(iterable, *, start=1):计算输入的可迭代对象 iterable 中所有元素的积。¶
积的默认起始值start为 1。
当可迭代对象为空时,返回起始值。
此函数特别针对数字值使用,并会拒绝非数字类型。
print(math.prod([1,2,3,4,5])) # 1*2*3*4*5,输出120
print(math.prod([1,2,3,4,5], start=2)) # 2*1*2*3*4*5,输出240
print(math.prod([]))
print(math.prod([], start=2)) #当可迭代对象为空时,返回起始值start(默认为1)。
math.floor(x):返回不大于x的最大整数。¶
print(math.floor(9.99)) # 输出9
print(math.floor(-9.01)) # 输出-10
print(math.floor(9)) # 输出9
math.ceil(x):返回不小于x的最小整数。¶
print(math.ceil(9.01)) # 输出10
print(math.ceil(-9.99)) # 输出-9
print(math.ceil(9)) # 输出9
math.isqrt(n):返回非负整数 n 的整数平方根。¶
即对 n 的实际平方根向下取整,或者相当于使得 a² ≤ n 的最大整数 a。
print(math.isqrt(99)) # 输出 99的整数平方根 9
某些情况下,对于正数 n,需求使得 n ≤ a² 的最小整数 a ,或者换句话说就是 n 的实际平方根向上取整,可使用下面的方法实现。
print(1 + math.isqrt(99 - 1)) # 输出不小于99的平方根的最小整数10
- ### 幂和对数函数
math.log(x[, base]):返回x以base为底的对数。¶
使用一个参数,返回 x 的自然对数(底base为 e )。
使用两个参数,返回给定的 base 为底的对数 x ,计算为 log(x)/log(base) 。
print(math.log(10)) # 返回10的自然对数
print(math.log(10, 2)) # 返回10以2为底对数
math.log2(x):返回以2为底的x的对数。¶
其值通常比log(x, 2)值更精确
print(math.log2(50)) # 返回50以2为底对数
math.log10(x):返回以10为底的x的对数。¶
其值通常比log(x, 10)值更精确
print(math.log10(50)) # 返回50以10为底对数
math.exp(x):返回 $e^x$¶
print(math.exp(2)) # 输出 e 的平方,7.38905609893065
math.pow(x, y):返回x的y次幂¶
结果为浮点数,pow(1.0, x) 和 pow(x, 0.0) 总返回1.0。
import math
print(pow(2, 3)) # 输出 2 的 3 次方 8.0
print(math.pow(1.0, 5)) # 输出 1.0
print(math.pow(5, 0)) # 输出 1.0
math.sqrt(x):返回x的平方根¶
结果为浮点数
print(math.sqrt(100)) # 输出 100的正数平方根 10.0
print(math.sqrt(2)) # 输出 2的正数平方根 1.4142135623730951
- ### 三角函数
math.sin(x):返回弧度x的正弦值。¶
print(math.sin(math.pi / 6))
print(math.sin(math.pi / 3))
math.cos(x):返回弧度x的余弦值。¶
print(math.cos(math.pi / 6))
print(math.cos(math.pi / 3))
math.tan(x):返回弧度x的正切值。¶
print(math.tan(math.pi / 4))
print(math.tan(0))
math.asin(x):返回以弧度为单位的 x 的反正弦值。¶
结果范围在 $-\frac{\pi}{2}$ 到 $\frac{\pi}{2}$ 之间。
print(math.asin(0.5))
print(math.asin(1))
math.acos(x):返回以弧度为单位的 x 的反余弦值。¶
结果范围在0到$\pi$之间。
print(math.acos(0.5))
print(math.acos(0))
math.atan(x):返回以弧度为单位的 x 的反正切值。¶
结果范围在 $-\frac{\pi}{2}$ 到 $\frac{\pi}{2}$ 之间。
print(math.atan(1))
print(math.atan(0))
math.hypot(*coordinates): 返回欧几里得范数。¶
即从原点到坐标给定点的向量长度
print(math.hypot(3, 4)) # 计算点(3, 4)到原点(0.0)的距离,输出 5.0
- ### 角度转换函数
math.degrees(x):弧度值转角度值。¶
print(math.degrees(math.pi / 4)) # 输出 45.0
print(math.degrees(math.pi)) # 输出 180.0
math.radians(x):角度值转弧度值。¶
print(math.radians(45)) # 输出约为pi/4
print(math.radians(180)) # 输出约为pi
实例:梅钦法计算圆周率¶
梅钦公式是格里高利/莱布尼茨计算的公式的变体,它的收敛速度很快,至今仍然是计算圆周率的主要公式,请根据此公式计算圆周率值。
$$\frac{\pi}{4}=4\arctan \frac{1}{5}-\arctan \frac{1}{239} $$提示:math库中反正切函数为__atan(x)__
import math
quarter_of_pi = 4 * math.atan(1 / 5) - math.atan(1 / 239)
pi = 4 * quarter_of_pi
print(pi) # 3.1415926535897936