《Python数学与科学计算完全指南:从基础运算到高级加密,解锁数据处理的核心技能!》
内置模块:数学与科学计算
1 math模块
math
模块提供了大量用于数学运算的函数。
三角函数
函数名 | 功能 |
---|---|
math.sin(x) | 返回 x 弧度的正弦值。 |
math.cos(x) | 返回 x 弧度的余弦值。 |
math.tan(x) | 返回 x 弧度的正切值。 |
math.asin(x) | 返回 x 的反正弦值,结果为弧度制。 |
math.acos(x) | 返回 x 的反余弦值,结果为弧度制。 |
math.atan(x) | 返回 x 的反正切值,结果为弧度制。 |
math.atan2(y, x) | 返回 y/x 的反正切值,结果为弧度制,考虑了符号以确定象限。 |
双曲函数
函数名 | 功能 |
---|---|
math.sinh(x) | 返回 x 的双曲正弦值。 |
math.cosh(x) | 返回 x 的双曲余弦值。 |
math.tanh(x) | 返回 x 的双曲正切值。 |
math.asinh(x) | 返回 x 的反双曲正弦值。 |
math.acosh(x) | 返回 x 的反双曲余弦值。要求 x 大于等于 1。 |
math.atanh(x) | 返回 x 的反双曲正切值。要求 x 的绝对值小于 1。 |
对数和指数函数
函数名 | 功能 |
---|---|
math.exp(x) | 返回 e 的 x 次幂。 |
math.log(x[, base]) | 返回 x 的自然对数(以 e 为底),若指定 base,则返回以 base 为底的对数。 |
math.log1p(x) | 返回 1 + x 的自然对数,对于接近零的 x 更精确。 |
math.log2(x) | 返回 x 以 2 为底的对数。 |
math.log10(x) | 返回 x 以 10 为底的对数。 |
幂函数和根函数
函数名 | 功能 |
---|---|
math.pow(x, y) | 返回 x 的 y 次幂。 |
math.sqrt(x) | 返回 x 的平方根。要求 x 非负。 |
角度转换
函数名 | 功能 |
---|---|
math.degrees(x) | 将 x 从弧度转换为角度。 |
math.radians(x) | 将 x 从角度转换为弧度。 |
取整函数
函数名 | 功能 |
---|---|
math.ceil(x) | 返回大于或等于 x 的最小整数。 |
math.floor(x) | 返回小于或等于 x 的最大整数。 |
math.trunc(x) | 返回 x 的整数部分,直接截断小数部分。 |
绝对值和取余
函数名 | 功能 |
---|---|
math.fabs(x) | 返回 x 的绝对值,结果为浮点数。 |
math.fmod(x, y) | 返回 x 对 y 取余的结果,结果的符号与 x 相同。 |
其他数学函数
函数名 | 功能 |
---|---|
math.factorial(x) | 返回 x 的阶乘,要求 x 为非负整数。 |
math.gcd(a, b) | 返回 a 和 b 的最大公约数。 |
math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) | 判断 a 和 b 是否接近,可通过 rel_tol 和 abs_tol 指定相对和绝对公差。 |
math.isfinite(x) | 如果 x 既不是无穷大也不是 NaN,则返回 True,否则返回 False。 |
math.isinf(x) | 如果 x 是正无穷大或负无穷大,则返回 True,否则返回 False。 |
math.isnan(x) | 如果 x 是 NaN(非数字),则返回 True,否则返回 False。 |
math.modf(x) | 返回 x 的小数部分和整数部分,结果为一个元组。 |
math.copysign(x, y) | 返回一个浮点数,其绝对值为 x 的绝对值,符号为 y 的符号。 |
math.fsum(iterable) | 返回可迭代对象中所有元素的精确浮点和。 |
math.prod(iterable, *, start=1) | 返回可迭代对象中所有元素的乘积,start 为初始值。 |
数学常量
常量名 | 功能 |
---|---|
math.pi | 圆周率,约等于 3.141592653589793。 |
math.e | 自然对数的底数,约等于 2.718281828459045。 |
math.tau | 圆周常数,等于 2π,约等于 6.283185307179586。 |
math.inf | 表示正无穷大的浮点数。 |
math.nan | 表示非数字(NaN)的浮点数。 |
import math
print(math.sin(math.pi / 6)) # 弧度值
print(math.asin(0.5))
print(math.pi / 6)print(2 ** 3)
print(2.2 ** 3)
print(math.pow(2,3)) # 结果为小数
print(9 ** 0.5)
print(2 ** -1)
print(math.sqrt(9))print(math.degrees(math.pi / 2))
print(math.radians(90))# round() # 银行家算法
# 向上取整
print(math.ceil(4.00000009))
print(math.ceil(4.5))
print(math.ceil(-1.11111)) # -1
# 向下取整
print(math.floor(3.99999999))
print(math.floor(3.00000009))
print(math.floor(-3.9999999))# -4
# 直接截断小数 只保留整数位
print(math.trunc(1.1236187253871263))
# abs()
print(abs(-3))
print(math.fabs(-3)) # float abs 结果为小数
print(math.factorial(3))
# 额外的专题:关于位运算符的一些应用 & | ^ ~ 最大公约数 开方
2 random模块
random
模块是 Python 标准库中用于生成随机数的模块,它提供了多种生成随机数的函数,可以用于模拟、游戏、加密等多个领域。
random
模块是 Python 标准库中用于生成伪随机数的模块,以下是对该模块中所有主要内容的详细介绍,并配有代码示例。
(1)random.random()
- 功能:返回一个范围在
[0.0, 1.0)
之间的随机浮点数。 - 示例代码:
import random
print(random.random()) #[0,1) 随机小数
(2)random.uniform(a, b)
- 功能:返回一个范围在
[a, b]
之间的随机浮点数,其中a
和b
是指定的上下界。 - 示例代码:
import random
print(random.uniform(2.5, 3.5))
(3)random.randint(a, b)
- 功能:返回一个范围在
[a, b]
之间的随机整数,包含a
和b
。 - 示例代码:
import random
print(random.randint(1, 3))
(4)random.randrange(start, stop, step)
- 功能:从
range(start, stop, step)
所表示的序列中随机选择一个整数。start
默认为 0,step
默认为 1。 - 示例代码:
import random
print(random.randrange(0, 4,2))
#[0,2]
(5)random.choice(seq)
- 功能:从非空序列
seq
中随机选择一个元素。如果序列为空,会引发IndexError
异常。 - 示例代码:
import random
arr = [1,2,3,4,5,6,7,8,9,10]
num = random.choice(arr)
print(num)
*(6)random.choices(population, weights=None, , cum_weights=None, k=1)
- 功能:从
population
中进行有放回的随机抽样,返回一个包含k
个元素的列表。weights
是一个与population
等长的权重序列,用于指定每个元素被选中的概率;cum_weights
是累积权重序列。如果两者都不提供,则所有元素被选中的概率相等。 - 示例代码:
import random
arr = [1,2,3,4,5]
# weights 默认大家都一样
# k = 1 只选一个
# cum_weights 累积权重序列 大家都一样
arr2 = random.choices(arr) # 等效于choice
print(arr2)
arr3 = random.choices(arr, weights=[5,2,1,1,1], k = 3)
print(arr3)
(7)random.sample(population, k)
- 功能:从
population
中进行无放回的随机抽样,返回一个包含k
个元素的新列表。k
不能大于population
的长度,否则会引发ValueError
异常。 - 示例代码:
import random
arr = [1,2,3,4,5]
arr2 = random.sample(arr,3)
print(arr2)
(8)random.shuffle(x)
- 功能:将可变序列
x
中的元素随机打乱顺序,直接修改原序列。如果x
是不可变序列,会引发TypeError
异常。 - 示例代码:
import random
arr = [1,2,3,4,5]
random.shuffle(arr)
print(arr)
(9)random.seed(a=None, version=2)
- 功能:设置随机数生成器的种子。如果
a
为None
或未提供,则使用系统时间作为种子;如果a
是一个整数,则使用该整数作为种子。相同的种子会生成相同的随机数序列,可用于调试和复现随机结果。 - 示例代码:
import random
import time
# random.seed(time.time())
random.seed(666)
for i in range(10):print(random.randint(1,10))
random.seed(444)
for i in range(10):print(random.randint(1,10))
以下函数了解即可
(10)random.gauss(mu, sigma)
- 功能:返回一个符合高斯分布(正态分布)的随机浮点数,其中
mu
是均值,sigma
是标准差。 - 示例代码:
import random
num = random.gauss(0, 1)
print(num)
(11)random.normalvariate(mu, sigma)
- 功能:与
random.gauss()
类似,也是返回一个符合高斯分布的随机浮点数,mu
是均值,sigma
是标准差。 - 示例代码:
import random
num = random.normalvariate(0, 1)
print(num)
(12)random.betavariate(alpha, beta)
- 功能:返回一个符合贝塔分布的随机浮点数,
alpha
和beta
是分布的参数,且都必须大于 0。 - 示例代码:
import random
num = random.betavariate(2, 3)
print(num)
(13)random.expovariate(lambd)
- 功能:返回一个符合指数分布的随机浮点数,
lambd
是分布的参数,且不能为 0。 - 示例代码:
import random
num = random.expovariate(0.5)
print(num)
(14)random.gammavariate(alpha, beta)
- 功能:返回一个符合伽马分布的随机浮点数,
alpha
和beta
是分布的参数,且都必须大于 0。 - 示例代码:
import random
num = random.gammavariate(2, 3)
print(num)
(15)random.lognormvariate(mu, sigma)
- 功能:返回一个符合对数正态分布的随机浮点数,
mu
是自然对数的均值,sigma
是自然对数的标准差。 - 示例代码:
import random
num = random.lognormvariate(0, 1)
print(num)
(16)random.vonmisesvariate(mu, kappa)
- 功能:返回一个符合冯·米塞斯分布(圆形正态分布)的随机浮点数,
mu
是分布的均值,kappa
是分布的集中度,且kappa
必须大于等于 0。 - 示例代码:
import random
num = random.vonmisesvariate(0, 1)
print(num)
(17)random.paretovariate(alpha)
- 功能:返回一个符合帕累托分布的随机浮点数,
alpha
是分布的形状参数,且必须大于 0。 - 示例代码:
import random
num = random.paretovariate(2)
print(num)
(18)random.weibullvariate(alpha, beta)
- 功能:返回一个符合威布尔分布的随机浮点数,
alpha
是尺度参数,beta
是形状参数,且都必须大于 0。 - 示例代码:
import random
num = random.weibullvariate(2, 3)
print(num)
(19)random.getstate()
- 功能:返回随机数生成器的当前内部状态,该状态可以用于后续的恢复操作。
- 示例代码:
import random
state = random.getstate()
print(state)
(20)random.setstate(state)
- 功能:将随机数生成器的内部状态设置为
state
,该state
通常是之前通过random.getstate()
函数获取的。 - 示例代码:
import random
state = random.getstate()
# 生成一个随机数
num1 = random.random()
# 恢复状态
random.setstate(state)
# 再次生成随机数,会得到与之前相同的结果
num2 = random.random()
print(num1, num2)
3 hashlib模块
数据加密:将明文数据通过一定的数学算法,转换成无序杂乱数据,达到数据保护的目的!一般情况下加密方式区分为两种:
- 对称加密:加密和解密使用的是同一套秘钥,如压缩文件的时候加密密码数据
- 非对称加密:加密和解密使用的不同的秘钥,如https数据传输使用到了公钥/私钥
数据加密的业务流程中,又区分为两种加密方式:
- 单向加密:对于明文数据只能加密,无法解密的数据!
- 双向加密:对于明文数据即可加密,也可以解密,细节(对称加密/非对称加密)
hashlib
提供了常见的哈希算法的实现,如 MD5、SHA-1、SHA-256 等。哈希算法可将任意长度的输入数据转换为固定长度的哈希值,这些哈希值通常用于数据完整性验证、密码存储等场景。
hashlib
支持多种哈希算法,常见的有:
- MD5:生成 128 位(16 字节)的哈希值,不过因其安全性问题,如今在密码存储等安全敏感场景中已不推荐使用。
- SHA-1:生成 160 位(20 字节)的哈希值,同样存在安全隐患,不适合用于高安全性要求的场景。
- SHA-256:属于 SHA-2 系列算法,生成 256 位(32 字节)的哈希值,安全性较高,应用广泛。
- SHA-512:也是 SHA-2 系列算法,生成 512 位(64 字节)的哈希值,安全性更强。
使用 hashlib
进行哈希计算的基本步骤如下:
- 创建哈希对象:调用
hashlib
模块中的相应函数来创建哈希对象。 - 更新数据:使用哈希对象的
update()
方法添加要计算哈希值的数据。 - 获取哈希值:使用哈希对象的
hexdigest()
方法获取十六进制表示的哈希值。
import hashlib
# 创建一个明文数据
data = "Hello World!"
# 创建一个SHA哈希加密对象
hash_object = hashlib.sha512()
# 将要加密的明文数据塞入加密对象
hash_object.update(data.encode("UTF-8"))
# 得到加密后的密文
hash_hex = hash_object.hexdigest()
print(hash_hex)
"""
你好
UTF-8 一个中文字符 占3位
12 34 89 78 34 56
GBK 一个中文字符 占2位
12 34 89 78 34 56
"""
混淆加密
import hashlib
"""
混淆
1.添加混淆码/盐值:给明文加一些别的内容 进行加密
2.对密码进行多次迭代加密:
"""
password = "123456"
# 设置一个盐值
salt = "!%@#&^$%^@!$#%^"# 一次加密
p1 = hashlib.sha512(password.encode("UTF-8"))
print(p1.hexdigest())
# 添加混淆值
p1.update(salt.encode("UTF-8"))
password = p1.hexdigest()print(password)# 二次加密
p2 = hashlib.md5(password.encode("UTF-8"))
p2.update(salt.encode("UTF-8"))
# 明文一次加密 -> 添加盐值 -> 密文 -> 二次加密 -> 添加盐值 -> 密文
print(p2.hexdigest())
演示一个简单的密码暴力枚举:
import hashlib
password = "999999"
p1 = hashlib.sha512(password.encode("UTF-8"))
passwd = p1.hexdigest()
print(passwd)for i in range(100000, 1000000):p2 = hashlib.sha512(str(i).encode("UTF-8"))cur_passwd = p2.hexdigest()if cur_passwd == passwd:print(i)break
4 其他相关模块
-
cryptography
:是一个功能强大且安全的加密库,它支持对称加密和非对称加密。 -
pycryptodome
:是一个自包含的 Python 包,包含了各种加密算法的实现。 -
statistics
:用于计算统计数据,如均值、中位数、方差等。 -
cmath
:用于处理复数的数学运算,包含了针对复数的三角函数、指数函数等。 -
numpy
:它是 Python 科学计算的基础库,提供了强大的多维数组对象和各种数学函数,可高效地进行数值计算。 -
scipy
:构建于 numpy 之上,提供了许多高级的科学计算功能,像优化、积分、插值、信号处理等。 -
sympy
:用于符号数学运算,能进行代数运算、微积分、方程求解等。