python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Numpy.Random()使用

Numpy.Random()函数的具体使用

作者:林深时见鹿1

numpy.random 是 NumPy 专门用于生成伪随机数的模块,本文就来详细的介绍一下Numpy.Random()函数的具体使用,具有一定的参考价值,感兴趣的可以了解一下

一、numpy.random 模块核心定位

numpy.random 是 NumPy 专门用于生成伪随机数的模块(伪随机:基于种子的可复现随机,而非真随机),相比 Python 原生 random 库,它的核心优势:

  1. 支持向量化生成:直接生成多维数组,无需循环(如一次性生成 1000 个正态分布数);
  2. 覆盖更多统计分布:除了均匀 / 正态分布,还支持泊松、指数、二项分布等;
  3. 效率更高:底层 C 实现,生成大规模随机数时速度远超 Python 原生;
  4. 可复现性:通过种子(seed)固定随机序列,便于实验复现。

二、先掌握基础:随机种子(seed)

伪随机数的生成依赖 “种子”(初始值),固定种子后,每次生成的随机数完全一致 —— 这是调试、复现实验的关键。

用法示例:

import numpy as np
# 1. 全局种子(影响所有random函数)
np.random.seed(42)  # 固定种子值(任意整数)
print(np.random.rand(3))  # [0.3745 0.9507 0.7319]
print(np.random.rand(3))  # [0.5986 0.1560 0.1559]
# 重置种子,重新生成(结果和第一次完全一致)
np.random.seed(42)
print(np.random.rand(3))  # [0.3745 0.9507 0.7319]
# 2. 局部随机生成器(推荐,不污染全局)
rng = np.random.default_rng(seed=42)  # 创建独立生成器
print(rng.rand(3))  # [0.7739 0.4389 0.8585]

关键说明:

三、常用随机函数分类(按场景)

类别 1:基础随机数(均匀分布)

生成 0~1 均匀分布、指定范围整数 / 浮点数,是最基础的随机数生成方式。

函数作用语法示例
np.random.rand()0~1 均匀分布浮点数rand(d0,d1,...)np.random.rand(2,3) → 2 行 3 列 0~1 浮点数
np.random.randn()标准正态分布(μ=0, σ=1)randn(d0,d1,...)np.random.randn(5) → 5 个标准正态数
np.random.randint()指定范围整数randint(low, high=None, size, dtype)np.random.randint(0,10,(2,2)) → 0~9 的 2x2 整数
np.random.uniform()指定范围均匀分布浮点数uniform(low, high, size)np.random.uniform(-5,15,31) → -5~15 的 31 个浮点数

实战示例(模拟 3 月温度,均匀分布):

import numpy as np
# 生成3月温度:-5~15℃均匀分布,31天,保留1位小数
march_temp = np.round(np.random.uniform(-5, 15, 31), 1)
print("3月温度(均匀分布):", march_temp[:10])
# 输出:[-1.2  8.7 12.3  4.5  9.8  0.7 11.1  7.2  2.9 14.8]
# 生成随机整数(模拟班级人数:30~50人,5个班级)
class_size = np.random.randint(30, 51, size=5)
print("班级人数:", class_size)  # 输出:[42 35 48 39 41]

类别 2:正态分布随机数(高频!贴合你的场景)

生成指定均值(μ)、标准差(σ)的正态分布数,适合模拟自然数据(温度、分数、身高)。

表格

函数作用语法示例
np.random.normal()自定义正态分布normal(loc=μ, scale=σ, size)np.random.normal(100,15,1000) → 均值 100,σ=15,1000 个
np.random.randn()标准正态分布(等价于 normal (0,1,size))randn(size)np.random.randn(10) → μ=0, σ=1

实战示例(模拟考试分数):

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成1000个分数:均值80,标准差10,限制0~100
scores = np.random.normal(80, 10, 1000)
scores = np.clip(scores, 0, 100)  # 限制范围
# 绘制直方图验证分布
fig, ax = plt.subplots(figsize=(10, 6))
ax.hist(scores, bins=20, color='skyblue', edgecolor='black')
ax.set_title('考试分数正态分布', fontsize=16)
ax.set_xlabel('分数', fontsize=14)
ax.set_ylabel('人数', fontsize=14)
plt.show()

类别 3:随机抽样 / 排列(数据打乱、采样)

用于从已有数据中随机选择、打乱顺序,适合机器学习的数据集划分、随机采样。

表格

函数作用语法示例
np.random.shuffle()原地打乱数组(一维 / 二维按行打乱)shuffle(arr)arr = [1,2,3]; np.random.shuffle(arr) → [2,1,3]
np.random.permutation()返回打乱后的新数组(不修改原数组)permutation(arr/size)np.random.permutation(5) → [3,1,4,2,0]
np.random.choice()从数组中随机采样(可重复 / 不重复)choice(arr, size, replace=True, p=概率)np.random.choice([1,2,3], size=5, p=[0.2,0.5,0.3])

实战示例(数据集随机采样):

import numpy as np
# 原始数据:10个学生ID
student_ids = np.arange(1, 11)  # [1,2,...,10]
# 1. 打乱数组(原地修改)
np.random.shuffle(student_ids)
print("打乱后的ID:", student_ids)  # 输出:[7 3 8 1 9 2 5 4 6 10]
# 2. 随机采样5个(不重复,无放回)
sample_ids = np.random.choice(student_ids, size=5, replace=False)
print("采样ID(无放回):", sample_ids)  # 输出:[3 9 2 6 10]
# 3. 按概率采样(比如抽中1的概率0.8,其他0.05)
prob_sample = np.random.choice([1,2,3,4], size=10, p=[0.8,0.05,0.05,0.1])
print("概率采样结果:", prob_sample)  # 输出:[1 1 1 4 1 1 2 1 1 3]

类别 4:其他常用分布(专业场景)

适用于特定统计场景,如泊松分布(计数数据)、指数分布(时间间隔)、二项分布(二分类实验)。

表格

函数适用场景示例
np.random.poisson()计数数据(如每天订单数、故障次数)np.random.poisson(lam=5, size=10) → 均值 5 的泊松数
np.random.exponential()时间间隔(如排队等待时间、设备寿命)np.random.exponential(scale=10, size=5) → 均值 10 的指数数
np.random.binomial()二分类实验(如抛硬币、抽奖)np.random.binomial(n=10, p=0.5, size=3) → 10 次抛硬币正面次数

实战示例(模拟每天订单数):

import numpy as np
# 模拟30天订单数:均值20的泊松分布
orders = np.random.poisson(lam=20, size=30)
print("30天订单数:", orders)
print("日均订单:", np.mean(orders))  # 接近20

四、高级用法:自定义随机生成器(推荐)

NumPy 1.17+ 推出了新的随机 API(Generator),替代旧的 np.random.* 全局函数,优势是线程安全、功能更全、避免种子冲突。

用法示例:

import numpy as np
# 创建自定义生成器(固定种子)
rng = np.random.default_rng(seed=42)
# 生成随机数(用法和旧API类似,前缀改为rng.)
print("0~1均匀分布:", rng.rand(3))
print("正态分布:", rng.normal(80, 10, 5))
print("随机整数:", rng.integers(0, 10, size=3))
print("打乱数组:", rng.permutation([1,2,3]))

五、避坑点与最佳实践

1. 常见误区

2. 最佳实践

总结

  1. numpy.random 核心是生成伪随机数,通过种子实现可复现,向量化生成效率远超 Python 原生;
  2. 高频函数(贴合你的场景):
    • 模拟自然数据:normal()(正态)、uniform()(均匀);
    • 数据打乱 / 采样:shuffle()choice()permutation()
    • 基础随机数:rand()(0~1)、randint()(整数);
  3. 推荐用法:用 np.random.default_rng() 创建自定义生成器,避免全局种子冲突;
  4. 避坑关键:区分不同分布函数,注意 randint 左闭右开,生成数据后用 clip() 限制合理范围。

到此这篇关于Numpy.Random()函数的具体使用的文章就介绍到这了,更多相关Numpy.Random()使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文