DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

随机数怎么生成?np.random.seed 和 default_rng 有什么不同?

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

常用随机数生成:

import numpy as np
np.random.rand(3, 2)        # [0,1) 均匀分布
np.random.randn(3, 2)       # 标准正态分布
np.random.randint(0, 10, 5) # 0~9 的 5 个随机整数
np.random.uniform(1, 5, 3)  # [1,5) 均匀
np.random.normal(0, 1, 3)   # 均值0标准差1的正态
np.random.choice([1,2,3], size=2, replace=False)  # 不放回抽样
np.random.shuffle(a)        # 原地打乱

固定随机种子 = 结果可复现:

np.random.seed(42)          # 老 API:设全局种子
a = np.random.rand(3)

rng = np.random.default_rng(42)   # 新 API:独立随机数发生器(推荐)
b = rng.random(3)
c = rng.integers(0, 10, 5)        # 注意新 API 方法名不同

np.random.seed vs default_rng 的区别:

| 维度 | np.random.seed(旧 API) | np.random.default_rng(新 API,NumPy 1.17+) |

|---|---|---|

| 作用范围 | 全局,影响所有 np.random 调用 | 局部对象,互不干扰 |

| 并发安全 | 全局状态多线程易出问题 | 每个 rng 独立,线程安全 |

| 随机质量 | 老算法(MT19937) | 新算法(PCG64),质量更好 |

| 方法名 | rand/randint/random_sample | random/integers/uniform/normal |

| 推荐 | 老代码兼容 | 新代码都用它 |

最佳实践: 训练/实验代码开头 rng = np.random.default_rng(42),保证多次运行结果一致、可复现,这是科研和调试的基本功。

下载推广海报

圈内讨论推广海报

《随机数怎么生成?np.random.seed 和 default_rng 有什么不同?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。