《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 :用于符号数学运算,能进行代数运算、微积分、方程求解等。

  • 作者:明灯L

    物联沃分享整理
    物联沃-IOTWORD物联网 » 《Python数学与科学计算宝典:基础到高级加密,数据处理核心技能全面解析》

    发表回复