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

NumPy 函数手册:随机数生成器(Generator)

在早期版本的 NumPy 中,随机数通常通过 numpy.random.* 形式的函数生成,例如 rand()、randint()、normal() 等。这些函数直接依赖一个全局随机数状态。

从 NumPy 1.17 开始,NumPy 引入了新的随机数生成体系。新的体系以 随机数生成器对象(Generator)为核心,通过对象方法生成随机数,而不再依赖全局状态。

这种设计具有以下优点:

• 避免全局随机状态带来的冲突

• 支持多个独立随机数流

• 更易于并行计算与多线程环境使用

• 随机数算法更加现代化

新的随机数体系由两层结构组成:

• Generator:用户接口,负责生成各种随机分布

• BitGenerator:底层随机数算法组件,负责产生随机比特序列

通常情况下,用户只需要使用 Generator 对象即可。

按照功能划分,随机数生成器相关函数通常可以分为五类:

(1)生成随机数生成器

(2)随机整数

(3)均匀分布随机数

(4)随机抽样与排列

(5)概率分布生成

一、创建随机数生成器

新的随机数体系首先需要创建一个 Generator 对象。

default_rng()

创建默认随机数生成器。

numpy.random.default_rng(seed=None)

参数说明:

• seed:随机数种子(整数或 None)

返回:Generator 对象。

示例 1:

import numpy as np rng = np.random.default_rng()rng.random(3)

输出示例:

[0.75761107 0.24291507 0.30791873]

说明:default_rng() 当前默认使用 PCG64 BitGenerator,是一种现代高质量随机数算法。

示例 2:指定 seed

rng = np.random.default_rng(42)rng.random(3)

在相同的 NumPy 版本与相同生成器实现下,使用相同 seed 通常可以复现同一随机序列。

注意:随机种子的作用不是固定每次调用的结果,而是固定整个随机数序列。

二、生成随机整数

Generator 对象提供 integers() 方法生成随机整数。

integers()

生成指定范围的随机整数。

Generator.integers(low, high=None, size=None, dtype=np.int64, endpoint=False)

参数说明:

• low:最小值;若 high=None,则生成 0~low-1 的整数

• high:最大值(不包含)

• size:输出数组形状

• dtype:输出整数类型

• endpoint:是否包含上界

示例:

rng = np.random.default_rng()rng.integers(0, 10, size=(3, 4))

输出示例:

[[3 2 4 0] [2 1 7 8] [0 0 6 2]]

说明:默认生成范围为:low ≤ x < high;若 endpoint=True,则区间为:low ≤ x ≤ high。

三、均匀分布随机数

Generator 对象提供多种均匀分布随机数方法。

random()

生成 [0,1) 区间的均匀分布随机数。

Generator.random(size=None)

参数说明:

• size:输出数组形状

示例:

rng = np.random.default_rng()rng.random((2,3))

输出示例:

[[0.45 0.12 0.88] [0.33 0.74 0.56]]

说明:返回值范围为 0 ≤ x < 1。

uniform()

生成指定区间的均匀分布随机数。

Generator.uniform(low=0.0, high=1.0, size=None)

参数说明:

• low:最小值

• high:最大值

• size:输出数组形状

示例:

rng.uniform(10, 20, size=5)

输出示例:

[19.79904352 17.20108561 12.71115832 16.38408231 10.02269652]

四、随机抽样与排列

Generator 对象也提供用于随机抽样与随机排列的方法。

choice()

从数组中随机选择元素。

Generator.choice(a, size=None, replace=True, p=None)

参数说明:

• a:数组或整数。若为整数 n,则表示从 0~n-1 中选择

• size:抽样数量

• replace:是否允许重复抽样

• p:概率分布。p 应与 a 长度一致,且概率和应为 1

示例:

rng.choice([10,20,30,40], size=3)

输出示例:

[30 10 40]

permutation()

生成随机排列。

Generator.permutation(x, axis=0)

参数说明:

• x:整数或数组

当 x 为整数 n 时,返回整数 0~n-1 的一个随机排列。当 x 为数组时,返回该数组元素的一个随机排列(不会改变原数组)。

示例 1:

rng.permutation(5)

输出示例:

[2 4 1 3 0]

示例 2:

arr = np.array([10,20,30,40])rng.permutation(arr)

输出示例:

[40 10 20 30]

shuffle()

原地打乱数组顺序。

Generator.shuffle(x, axis=0)

参数说明:

• x:输入数组

示例:

a = np.array([1,2,3,4,5])rng.shuffle(a)print(a)

输出示例:

[5 3 1 4 2]

说明:shuffle() 会直接修改原数组。对多维数组,shuffle() 只会打乱第一轴(axis=0)的顺序。

五、常见概率分布

Generator 提供大量概率分布随机数方法。

normal()

生成正态分布随机数。

Generator.normal(loc=0.0, scale=1.0, size=None)

参数说明:

• loc:均值

• scale:标准差

• size:输出数组形状

示例:

rng.normal(0, 1, size=5)

输出示例:

[ 1.35864537 -0.04120372 2.3100363 0.36050125 -1.92153982]

说明:默认参数时生成标准正态分布。标准正态分布常用于描述自然随机误差、统计推断以及机器学习中的数据标准化与随机初始化。

binomial()

生成二项分布随机数。

Generator.binomial(n, p, size=None)

参数说明:

• n:试验次数

• p:成功概率

• size:输出数组形状

示例:

rng.binomial(10, 0.5, size=5)

说明:二项分布常用于描述 n 次独立试验中的成功次数。

poisson()

生成泊松分布随机数。

Generator.poisson(lam=1.0, size=None)

参数说明:

• lam:平均发生次数

• size:输出数组形状

示例:

rng.poisson(3, size=5)

说明:泊松分布用于描述单位时间或空间中的事件次数。

exponential()

生成指数分布随机数。

Generator.exponential(scale=1.0, size=None)

参数说明:

• scale:尺度参数

• size:输出数组形状

示例:

rng.exponential(1.0, size=5)

说明:指数分布用于描述事件间隔时间。

gamma()

生成 Gamma 分布随机数。

Generator.gamma(shape, scale=1.0, size=None)

参数说明:

• shape:形状参数

• scale:尺度参数

• size:输出数组形状

示例:

rng.gamma(2.0, 2.0, size=5)

说明:Gamma 分布常用于描述等待时间、事件累计时间以及作为贝叶斯统计中的先验分布。

beta()

生成 Beta 分布随机数。

Generator.beta(a, b, size=None)

参数说明:

• a:形状参数 α

• b:形状参数 β

• size:输出数组形状

示例:

rng.beta(2, 5, size=5)

说明:Beta 分布常用于概率建模与贝叶斯统计。

chisquare()

生成卡方分布随机数。

Generator.chisquare(df, size=None)

参数说明:

• df:自由度

• size:输出数组形状

示例:

rng.chisquare(3, size=5)

说明:卡方分布常用于统计检验与方差分析。

lognormal()

生成对数正态分布随机数。

Generator.lognormal(mean=0.0, sigma=1.0, size=None)

参数说明:

• mean:对数均值

• sigma:对数标准差

• size:输出数组形状

示例:

rng.lognormal(0, 1, size=5)

说明:若随机变量的对数服从正态分布,则该变量服从对数正态分布。

multivariate_normal()

生成多变量正态分布随机样本。

Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8, *, method='svd')

参数说明:

• mean:均值向量

• cov:协方差矩阵,应为对称的半正定矩阵

• size:输出样本数量

示例:

mean = [0,0] cov = [[1,0.5], [0.5,1]] rng.multivariate_normal(mean, cov, size=5)

说明:生成具有指定协方差结构的随机向量,常用于多变量统计分析、Monte Carlo 模拟以及金融风险建模。

multinomial()

从多项分布中抽样。

Generator.multinomial(n, pvals, size=None)

参数说明:

• n:试验次数

• pvals:各类别概率,通常应满足总和为 1

• size:输出数组形状

示例:

rng.multinomial(10, [0.2, 0.3, 0.5])

输出示例:

[1 3 6]

说明:输出表示各类别出现的次数,总和为 n。

多项分布是二项分布的推广,常用于分类问题建模、文本分析以及计数数据建模。

dirichlet()

生成 Dirichlet 分布随机样本。

Generator.dirichlet(alpha, size=None)

参数说明:

• alpha:参数向量

• size:输出样本数量

示例:

rng.dirichlet([1,1,1], size=3)

输出示例:

[[0.41 0.35 0.24] [0.17 0.51 0.32] [0.28 0.21 0.51]]

说明:每个样本向量满足:x1 + x2 + x3 = 1。

Dirichlet 分布常用于概率向量建模、贝叶斯统计以及主题模型(LDA)。

📘 小结

NumPy 自 1.17 起引入了以 Generator 为核心的新随机数体系。通过 default_rng() 可创建生成器,并使用对象方法生成整数、均匀分布样本、随机抽样及多种概率分布数据。与旧式全局状态接口相比,这种方式更清晰、更灵活,也更适合现代数值计算场景。

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/451094/

相关文章:

  • Qwen3-Reranker-0.6B与爬虫系统集成实战
  • Flutter 三方库 leancode_contracts_generator 的鸿蒙化适配指南 - 掌控契约生成资产、精密工程治理实战、鸿蒙级架构专家
  • 2026装修设计新趋势:全屋智能家居引领未来生活新体验,精装房设计/房屋设计/别墅设计/独立设计师,装修设计推荐怎么选择 - 品牌推荐师
  • 医疗数据差分隐私落地失败的7个隐性雷区,第4个连资深算法总监都踩过(附可审计的Python日志埋点方案)
  • 保姆级教程:WAN2.2文生视频+SDXL风格,手把手教你做商品展示视频
  • 客服智能体大模型选型指南:从效率提升视角解析主流预训练模型
  • 手把手教你用DolphinScheduler补数:从配置到实例监控的全流程演示
  • 别墅设计全流程揭秘:2026年如何确保设计顺利落地,别墅设计/室内设计/装修/民宿设计/精装房,别墅设计多少钱口碑推荐榜 - 品牌推荐师
  • Python开发者必看:在UOS/Debian/Ubuntu上打包Python应用为deb的完整指南(附常见错误排查)
  • MusePublic Art Studio在设计师工作流中的应用:替代PS初稿生成
  • Qwen-Image-2512-ComfyUI新手避坑指南:CUDA版本选对,部署一次成功
  • Qwen3-ASR-1.7B效果展示:上海话戏曲唱段+伴奏分离后语音识别准确率实测
  • 3步构建创新型编程教育平台:高效赋能未来开发者培养
  • lite-avatar形象库效果展示:教师数字人板书+讲解+表情三位一体教学演示
  • OFA图像描述模型Matlab接口调用教程:科研场景下的图像分析集成
  • Qwen-Image-2512-Pixel-Art-LoRA部署教程:Docker Compose一键启停像素艺术服务
  • GLM-OCR保姆级教程:3步搭建本地文档识别服务,小白也能搞定
  • 掌控消息:RevokeMsgPatcher让微信QQ聊天记录永不消失的秘密
  • 实测Qwen3-4B:256K长文本模型写出的代码质量有多高?
  • DAMO-YOLO手机检测详细步骤:Gradio界面响应超时(timeout)参数调优
  • ai辅助c语言学习:让快马智能助手解释代码与生成算法示例
  • 基于大语言模型的AI智能客服系统实战:从架构设计到性能优化
  • BEYOND REALITY Z-Image部署优化:使用Keil5进行嵌入式开发
  • 实战演练:基于快马平台开发YOLOv8视频流安全监控与区域入侵检测系统
  • SeqGPT-560M入门指南:如何评估自定义字段定义的合理性与覆盖度
  • 2026年别墅设计新策略:融入人工智能的家居体验方案排行盘点,室内空间设计/软装设计/精装房,别墅设计品牌找哪家 - 品牌推荐师
  • 从零开始:在VMware虚拟机中搭建LiuJuan20260223Zimage模型开发与测试环境
  • Chat2DB升级决策指南:从社区版到Pro版的功能价值对比与实施路径
  • 春联生成模型背后的AI编程思想:Agent工作流设计入门
  • VoxCPM-1.5-WEBUI:如何利用网页界面实现高质量的声音克隆?