当前位置: 首页 > news >正文

《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] 之间的随机浮点数,其中 ab 是指定的上下界。
  • 示例代码
import random
print(random.uniform(2.5, 3.5))

(3)random.randint(a, b)

  • 功能:返回一个范围在 [a, b] 之间的随机整数,包含 ab
  • 示例代码
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)

  • 功能:设置随机数生成器的种子。如果 aNone 或未提供,则使用系统时间作为种子;如果 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)

  • 功能:返回一个符合贝塔分布的随机浮点数,alphabeta 是分布的参数,且都必须大于 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)

  • 功能:返回一个符合伽马分布的随机浮点数,alphabeta 是分布的参数,且都必须大于 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模块

数据加密:将明文数据通过一定的数学算法,转换成无序杂乱数据,达到数据保护的目的!一般情况下加密方式区分为两种:

  • 对称加密:加密和解密使用的是同一套秘钥,如压缩文件的时候加密密码数据

image-20250507203154395

  • 非对称加密:加密和解密使用的不同的秘钥,如https数据传输使用到了公钥/私钥

image-20250507203602922

数据加密的业务流程中,又区分为两种加密方式:

  • 单向加密:对于明文数据只能加密,无法解密的数据!
  • 双向加密:对于明文数据即可加密,也可以解密,细节(对称加密/非对称加密)

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 进行哈希计算的基本步骤如下:

  1. 创建哈希对象:调用 hashlib 模块中的相应函数来创建哈希对象。
  2. 更新数据:使用哈希对象的 update() 方法添加要计算哈希值的数据。
  3. 获取哈希值:使用哈希对象的 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 :用于符号数学运算,能进行代数运算、微积分、方程求解等。

http://www.xdnf.cn/news/551755.html

相关文章:

  • 手握消防设施操作员证,职业之路更宽广
  • C++ Pimpl(Pointer to Implementation)设计思想
  • AI 商业化部署中,ollama 和 vllm 的选型对比
  • 二叉树遍历--(前 中 后 层序)
  • 【lvgl9】使用keyboard和textarea实现密码数字输入界面
  • Git 克隆子分支
  • 本地ip如何映射到外网?借助端口映射软件把内网地址给别人用
  • Jetson Agx Orin平台JP5.1.4-R35.6.0版本VI recover导致内核崩溃问题(有官方patch)
  • uni-app项目从0-1基础架构搭建全流程
  • Nextcloud与Google就安卓文件访问权限展开博弈
  • 从代码学习深度学习 - 预训练word2vec PyTorch版
  • NebulaGraph学习笔记-SessionPool之Session not existed
  • 五、central cache的设计
  • 多环境回测模拟不同市场条件下的策略表现
  • CSS专题之常见布局
  • 设备全生命周期管理:从采购到报废的数字化闭环方案
  • Varlet UI-Material Design风格Vue 3框架移动端组件库
  • SUI批量转账几种方法介绍
  • 构建AI时代的大数据基础设施-MaxCompute多模态数据处理最佳实践
  • 人工智能+:职业价值的重构与技能升级
  • LSM Tree算法原理
  • [特殊字符]车牌识别相机,到底用在哪?
  • 芯片分享之AD976性能介绍
  • NVM 安装与配置指南
  • Python中使用CUDA/GPU的方式比较
  • GMSL:汽车里的音视频传输
  • Python 包管理工具uv依赖分组概念解析
  • 瑞莎星睿 O6 (Radxa Orion O6)-ubuntu24.04-ROS2 运行深度估计模型
  • 数据分析_主播考核指标体系搭建
  • C++学习:六个月从基础到就业——多线程编程:互斥量与锁