详解Python中Numpy.Random()函数的随机数生成实战(附代码)

AI 概述
本文介绍numpy.random模块,其可生成伪随机数,支持向量化、多统计分布,效率高于Python原生random且可复现。讲解随机种子用法,区分全局与推荐的局部生成器,梳理均匀、正态等常用随机函数及抽样、排列方法,介绍高级自定义生成器,同时指出使用误区与最佳实践。
目录
文章目录隐藏
  1. 一、掌握基础:随机种子(seed)
  2. 二、常用随机函数分类(按场景)
  3. 三、高级用法:自定义随机生成器(推荐)
  4. 四、避坑点与最佳实践
  5. 总结

详解 Python 中 Numpy.Random()函数的随机数生成实战(附代码)

numpy.random 是 NumPy 用于生成伪随机数的核心模块,相比 Python 原生 random,具备向量化生成、高效底层、多统计分布、可复现随机的核心优势。本文全面讲解随机种子、基础函数、正态分布、抽样排列、高级生成器及最佳实践,帮你快速掌握随机数生成,满足数据模拟、机器学习等场景需求。

一、掌握基础:随机种子(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]

关键说明:

  • np.random.seed():全局种子,设置后所有 np.random.* 函数都受影响;
  • np.random.default_rng():NumPy 1.17+ 推荐用法,创建独立的随机生成器,避免全局种子冲突;
  • 种子值可任意选(如 42、10、2024),核心是 “固定值对应固定随机序列”。

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

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 的 2×2 整数
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. 常见误区

  • 混淆 rand/randn/normal
    • rand():0~1 均匀分布;
    • randn():标准正态(μ=0, σ=1);
    • normal(loc, scale):自定义正态分布(常用);
  • randint 的 high 参数randint(0,10) 生成 0~9(不包含 10),需注意 “左闭右开”;
  • shuffle 原地修改shuffle(arr) 直接修改原数组,如需保留原数组,用 permutation()

2. 最佳实践

  • 固定种子:实验 / 调试时必须设置种子,确保结果可复现;
  • 使用新生成器:优先用 np.random.default_rng() 而非全局 seed()
  • 大规模生成:生成百万级随机数时,用 NumPy 而非 Python 原生 random(速度快 100 + 倍);
  • 范围限制:生成自然数据(温度、分数)时,用 np.clip() 限制合理范围,避免极端值。

总结

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

numpy.random 凭借高效、多维、可复现的特性,成为数据科学必备工具。牢记随机种子固定、优先使用 default_rng 独立生成器,区分各类随机函数用法,配合数据范围限制,可安全高效生成随机数据。熟练运用该模块,能大幅提升数据处理与实验仿真的开发效率。

以上关于详解Python中Numpy.Random()函数的随机数生成实战(附代码)的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 详解Python中Numpy.Random()函数的随机数生成实战(附代码)

发表回复