numpy.random.default_rng()

 
 

🧩 1. numpy.random.default_rng() 的参数

官方推荐:
rng = np.random.default_rng(seed)

✔ 参数说明:

seed(可选)

  • 可以是:
    • int(常用)
    • None(默认)
    • np.random.SeedSequence
    • python 的 bytes-like 对象

✔ 作用:

  • 指定生成器的初始状态,使随机数 可复现(deterministic)
  • 如果 seed=None(默认):
    • → NumPy 使用系统熵(/dev/urandom)自动生成随机种子
      → 随机数 不可复现

示例:

rng1 = np.random.default_rng(42) rng2 = np.random.default_rng(42) print(rng1.random()) # 两者相同 print(rng2.random())

🧩 2. 为什么叫 default_rng()

因为它返回 推荐的默认随机生成器
  • 不是旧版 RandomState(已不推荐)
  • 而是新式 Generator(PCG64)
    • PCG64 比 Mersenne Twister 更快、更安全、质量更高。

🧩 3. rng 是什么?

rng 是一个实例:
rng = np.random.Generator(np.random.PCG64(seed))
Generator = 随机数生成接口(你用的所有 random 方法)
PCG64 = 后端随机算法(用来生成 bits)

🎯 4. Generator(rng)里的全部函数(最全、分类版)

我按照 用途分类(不是文档顺序)让你真正理解。

🟦 A. 基础随机数

1. rng.random(size)

Uniform[0,1) 分布。
rng.random() # 一个数 rng.random(5) # 向量 rng.random((3,2)) # 矩阵

2. rng.uniform(low, high, size)

一般的均匀分布。
rng.uniform(5, 10, 3)

3. rng.integers(low, high, size, endpoint=False)

整数随机数(比 randint 更强)。
rng.integers(0, 10, 5)

🟦 B. 标准分布(最重要)

✔ 1. 正态分布

rng.normal(loc=0, scale=1, size=None)

✔ 2. 二项分布

rng.binomial(n, p, size)

✔ 3. 泊松分布

rng.poisson(lam, size)

✔ 4. 指数分布

rng.exponential(scale, size)

✔ 5. 伽马分布

rng.gamma(shape, scale, size)

✔ 6. 卡方分布

rng.chisquare(df, size)

✔ 7. Beta 分布

rng.beta(a, b, size)

✔ 8. 对数正态分布

rng.lognormal(mean, sigma, size)

✔ 9. F / t 分布

rng.f(dfnum, dfden, size) rng.standard_t(df, size)

✔ 10. 多元正态

rng.multivariate_normal(mean, cov, size)
(金融Monte Carlo 强烈常用)

🟦 C. 采样、随机排列、权重抽样

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

从数组里抽样。
  • replace=False → 不放回
  • p= → 权重
rng.choice([1,2,3], size=5, replace=True)

2. rng.permutation(x)

返回打乱后的数组。
rng.permutation(10)

3. rng.shuffle(x)

原地打乱。

🟦 D. 复杂随机数组

1. rng.bytes(length)

返回随机字节序列(密码学不安全)。

🟦 E. Beta / Dirichlet / Multinomial(机器学习常用)

1. Dirichlet

rng.dirichlet(alpha, size)

2. Multinomial

rng.multinomial(n, pvals, size)

🟦 F. 离散分布(稀有 but 完整性给你)

rng.geometric(p, size) rng.hypergeometric(ngood, nbad, nsample, size) rng.logseries(p, size)

🟦 G. 特殊分布(物理、统计专用)

rng.wald(mean, scale, size) rng.vonmises(mu, kappa, size) rng.laplace(loc, scale, size) rng.pareto(a, size) rng.weibull(a, size)

🟧 5. Generator 内部结构简图(帮助理解)

Generator │ ├── BitGenerator(e.g. PCG64) │ └── 产生随机比特 │ └── Random API(你用的函数) ├── normal() ├── integers() ├── uniform() ├── choice() └── ...

🚀 6. 为什么必须使用 rng 而不是 np.random

功能
np.random 旧 API
rng = np.random.default_rng() 新 API
随机数质量
基于 Mersenne Twister
PCG64(更好)
并行安全
❌ 不安全
✅ 可独立多个 rng
全局状态污染
❌ 可能互相影响
✅ 每个 rng 独立
多线程
推荐程度
❌ 不推荐
⭐ 官方推荐

🎯 7. 最常用蒙特卡洛组合示例

1. 生成正态随机数

z = rng.normal(0, 1, 1_000_000)

2. 模拟股票价格(GBM)

S = S0 * np.exp((mu - .5*sigma**2)*dt + sigma*np.sqrt(dt)*z)

3. 随机抽样

samples = rng.choice(data, size=1000, replace=True)

📌 最终总结(非常重要)

default_rng(seed) 只有一个参数:seed

用于控制随机种子和 reproducibility。

rng(Generator)中包含大量随机函数

用于:
  • 生成基础随机数
  • 各种连续分布
  • 各种离散分布
  • 权重抽样
  • 多元正态
  • 洗牌/排列
  • 特殊统计分布