教程 | Numpy的伪随机数生成

本文深入探讨了Numpy中的随机数生成模块,对比Python内置的random模块,Numpy提供了更高效、更多样化的随机数生成函数,适用于大规模数据样本的生成。文中详细介绍了如何使用Numpy生成不同分布的随机数,并解释了伪随机数的概念及其生成原理。

 

访问flyai.club,一键创建你的人工智能项目

 

        

        numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。例如,你可以用normal来得到一个标准正态分布的4×4样本数组:

 

 

        而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可以看出,如果需要产生大量样本值,numpy.random快了不止一个数量级

 

 

        我们说这些都是伪随机数,是因为它们都是通过算法基于随机数生成器种子,在确定性的条件下生成的。你可以用NumPy的np.random.seed更改随机数生成种子:

 

 

        numpy.random的数据生成函数使用了全局的随机种子。要避免全局状态,你可以使用numpy.random.RandomState,创建一个与其它隔离的随机数生成器:

 

 

        numpy.random函数

 

        

 

教程 | Jupyter Notebook初级教程——迷死人的基础操作​

教程 | Jupyter Notebook基础教程——快捷键的使用​

教程 | Python之Numpy ndarray 基本介绍 1​

教程 | Python之Numpy ndarray 基本介绍 2​

教程 | Python之Numpy ndarray 基本介绍 3​

教程 | Python之Numpy ndarray 基本介绍 4​

教程 | 通用函数:快速的元素级数组函数​

教程 | 使用数组进行数组编程(上)

教程 | 使用数组进行数组编程(下)​

教程 | Numpy的线性代数运算

点击 阅读原文 ,动手操作

 

—  End —

 

<think> 我们正在讨论Python的random模块,它用于生成伪随机数。用户要求了解random伪随机数生成函数的介绍。根据引用,我们可以总结以下要点: 1. random模块是Python标准库的一部分,用于生成伪随机数。 2. 它基于Mersenne Twister算法,该算法生成53位精度的浮点数,周期非常长(2^19937-1)。 3. 虽然是伪随机数(即确定性算法生成),但经过广泛测试,适合大多数非加密用途。 4. 基本函数是random(),生成[0.0, 1.0)范围内的均匀分布浮点数。 我们将介绍random模块的常用函数,并注意以下几点: - 使用中文 - 数学公式用$...$或$$...$$ - 在适当的地方添加引用标记 以下是回答的结构: 1. 引入:解释什么是伪随机数,以及random模块的作用。 2. 核心函数:介绍random()函数和其他重要函数(如生成整数、序列操作、实值分布等)。 3. 注意点:强调其伪随机性和不适用于加密。 4. 示例代码:展示几个常用函数的用法。 5. 总结:使用场景和替代方案(如numpy.random)。 同时,根据引用[2],我们还可以提到numpy.random作为补充。 最后,生成相关问题。 </think> ### Python `random` 模块:伪随机数生成详解 `random` 模块是 Python 标准库中用于生成**伪随机数**的核心工具。以下是关键解析: --- #### 1. 伪随机数本质 - **确定性算法**:通过固定算法(Mersenne Twister)根据**随机种子**($\text{seed}$)迭代生成序列 - **周期特性**:周期为 $2^{19937}-1$(约 $10^{6000}$ 量级),之后序列会重复[^3] - **非加密安全**:完全可预测,不适用于密码学场景[^3] #### 2. 核心生成器 ```python import random # 初始化种子 (默认为系统时间) random.seed(42) # 基础生成函数 [0.0, 1.0) rand_float = random.random() # 例: 0.639426... ``` - 生成 $[0.0, 1.0)$ 间的 53 位精度浮点数[^3] - 底层使用**梅森旋转算法**(Mersenne Twister),速度快且线程安全 --- #### 3. 常用函数分类 ##### ① 整数生成 | 函数 | 数学表达 | 示例 | |--------------------------|----------------------------|--------------------------| | `randint(a, b)` | $X \sim U[a,b]$ | `random.randint(1,6)` → 3 | | `randrange(start, stop, step)` | $X \in \{s,s+st,s+2st,...\}$ | `random.randrange(0,10,2)` → 4 | ##### ② 序列操作 ```python colors = ['red','green','blue'] random.shuffle(colors) # 原地洗牌 → ['blue','red','green'] random.choice(colors) # 随机选取 → 'red' random.sample(colors,2) # 无放回抽样 → ['green','blue'] ``` ##### ③ 实值分布 | 分布类型 | 函数 | 概率密度函数 | |------------|---------------------|----------------------------------| | 均匀分布 | `uniform(a, b)` | $f(x)=\frac{1}{b-a}\ (a\leq x\leq b)$ | | 高斯分布 | `gauss(mu, sigma)` | $f(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$ | | 指数分布 | `expovariate(lambda)` | $f(x)=\lambda e^{-\lambda x}$ | --- #### 4. 关键特性 1. **种子控制** 相同种子产生相同序列: ```python random.seed(100) a = random.random() # 始终为 0.145669... ``` 2. **性能局限** 单次仅生成一个值,需循环生成数组 → 推荐 `numpy.random` 批量生成[^2] 3. **应用场景** ✅ 蒙特卡洛模拟 ✅ 游戏随机事件 ✅ 机器学习数据打乱 ❌ 加密/安全相关 --- #### 5. 基础使用示例 ```python # 模拟骰子投掷 dice = random.randint(1, 6) # 生成正态分布样本 mu, sigma = 0, 0.1 sample = random.gauss(mu, sigma) # 从列表加权抽样 fruits = ['apple','orange','banana'] weights = [0.3, 0.2, 0.5] choice = random.choices(fruits, weights, k=10) ``` > **扩展阅读**:对加密场景应使用 `secrets` 模块;科学计算优先选 `numpy.random`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值