一、什么是Numpy?

Numpy是Python中用于科学计算的核心库,提供了高效的多维数组对象(ndarray)和大量数学函数。随机数生成是Numpy的常用功能之一,广泛用于数据分析、机器学习、模拟实验等场景。而np.random是Numpy专门用于生成随机数的子模块,其中randrandn是最基础且常用的两个函数。

二、安装与导入Numpy

首先确保已安装Numpy(若未安装,可通过pip install numpy命令安装)。在代码中导入Numpy:

import numpy as np

三、随机数生成的基本概念

Numpy的随机数是伪随机数(由算法生成,固定种子可复现),常用分布包括:
- 均匀分布:每个数出现的概率相同(类似掷骰子,每个面概率相等)。
- 正态分布(高斯分布):数据集中在均值附近,呈“钟形”分布(类似人类身高,多数人接近平均身高,极端值少)。

四、np.random.rand:生成均匀分布随机数

np.random.rand(d0, d1, ..., dn)用于生成[0, 1)区间内的均匀分布随机数,参数d0, d1,...表示数组的形状(如行数、列数)。

示例1:生成1维数组

# 生成长度为5的1维数组(形状:(5,))
arr1 = np.random.rand(5)
print(arr1)
# 输出示例(每次运行结果不同):[0.3456 0.1234 0.7890 0.5678 0.9012]

示例2:生成多维数组

# 生成2行3列的矩阵(形状:(2, 3))
arr2 = np.random.rand(2, 3)
print(arr2)
# 输出示例:
# [[0.1234 0.5678 0.9012]
#  [0.3456 0.7890 0.2345]]

关键特点:

  • 所有元素值在[0, 1)之间。
  • 若参数为空(np.random.rand()),返回标量0~1的随机数。

五、np.random.randn:生成标准正态分布随机数

np.random.randn(d0, d1, ..., dn)用于生成标准正态分布(均值=0,标准差=1)的随机数,参数含义与rand相同。

示例1:生成1个随机数

# 生成1个标准正态分布随机数
num = np.random.randn()
print(num)
# 输出示例:0.5678(可能为正或负,多数值集中在-1~1之间)

示例2:生成2×2矩阵

# 生成2行2列的标准正态分布矩阵
mat = np.random.randn(2, 2)
print(mat)
# 输出示例:
# [[-0.1234  0.5678]
#  [ 0.9012 -0.3456]]

关键特点:

  • 数据集中在0附近,大部分值在[-1, 1]之间,极端值(如±3以上)概率较低。
  • 若需调整均值或标准差,可通过公式转换:μ + σ * np.random.randn(shape)(μ为目标均值,σ为目标标准差)。

六、rand与randn的对比

特性 np.random.rand() np.random.randn()
分布类型 均匀分布([0, 1)) 标准正态分布(均值0,标准差1)
数据范围 所有元素在0到1之间(含0不含1) 可正可负,多数值集中在-1~1之间
参数 形状(如(m, n) 形状(如(m, n)
核心作用 生成等概率取值的随机数据 生成接近自然现象的“正态分布”数据

七、实用技巧:固定随机种子

为了避免随机结果波动(如复现实验),可通过np.random.seed()固定种子:

np.random.seed(0)  # 种子固定为0,后续随机数生成结果一致
print(np.random.rand(2, 2))
# 输出:
# [[0.3980 0.4109]
#  [0.0399 0.3398]]

八、总结

  • np.random.rand(shape)生成[0, 1)均匀分布的随机数组,适合需要“等概率取值”的场景(如初始化权重)。
  • np.random.randn(shape)生成标准正态分布的随机数组,适合模拟自然数据波动(如生成噪声、测试算法鲁棒性)。

建议:初学者可通过多次生成不同形状的数组,观察数值分布特点,快速熟悉两者区别。

练习

尝试生成以下随机数组,并观察结果:
1. np.random.rand(3, 4)(3行4列均匀分布矩阵)
2. np.random.randn(1000)(1000个标准正态分布数,计算均值和标准差是否接近0和1)
3. 固定种子seed=1,生成np.random.rand(2)并对比两次运行结果是否相同。

小夜