Numpy中构造数据的random类

在日常工作中,当遇到一个问题时,总是先简化它,寻找某一种方法来解决它。如果不使用原数据集,就需要构造数据来验证该方法。大家应该也知道numpy中random类有很多方法可以构造数据,但是当谈论到具体某一种方法的详细说明可能就会含糊不清了,今天就带大家复习下这些方法。

先把这些方法一一列出,方便大家查看

  • numpy.random.rand
  • numpy.random.randn
  • numpy.random.randint
  • numpy.random.random(与numpy.random.ranf功能一致)
  • numpy.random.choice
  • numpy.random.bytes
  • numpy.random.uniform
  • numpy.random.shuffle
  • numpy.random.RandomState

numpy.random.rand

numpy.random.rand(d0,d1,...,dn)(d0,d1为想要创建样本的维度)

创建给定形状的数组,并使用来自均匀分布的随机样本填充它。值得范围是 [0, 1)。

例子如下:

import numpy as np

np.random.rand()
#0.5218338135626677

np.random.rand(2,3)
#array([[ 0.88534282,  0.94114095,  0.55626956],
#       [ 0.56497396,  0.33207925,  0.84650539]])

numpy.random.randn

numpy.random.randn(d0d1...dn)

从“标准正态”分布中(均值0和方差1)返回一个样本(或样本)。

例子如下:

import numpy as np

np.random.randn()
#0.6431863026029006

np.random.randn(2,3)
#array([[-1.39990345, -0.45569575,  0.68015143],
#       [ 0.07683786,  0.00220794,  0.65128032]])

#如果想生成服从(3,6.25)的正态分布
2.5 * np.random.randn(2, 3) + 3
#array([[ 2.45505539,  6.18266592,  2.99618938],
#       [ 2.32896161,  3.82456413,  4.58273751]])

numpy.random.randint

numpy.random.randint(low, high=None, size=None, dtype='l')

随机生成需要的整数,一般是个范围。

参数

含义
low整数范围的最小值,如果high为none,则为最大值,即[0,low)。
high整数范围的最大值,即[low,high)。
size输出样本的形状。
dtype结果的类型,默认值为'np.int'。

例子如下:

import numpy as np

np.random.randint(3, size=10)
#array([1, 2, 0, 0, 1, 2, 0, 1, 2, 2])

#生成一个二维数组,范围在[0,4]
np.random.randint(5, size=(2, 4))
#array([[1, 0, 4, 4],
#       [2, 1, 4, 1]])

numpy.random.random

numpy.random.random(size=None)

在半开区间[0.0,1.0)中返回随机浮点数。 

例子如下:

import numpy as np

np.random.random()
#0.969503002640394

np.random.random(size=10)
#array([ 0.10988239,  0.06355942,  0.62419081,  0.43922847,  0.01482134,
#        0.66467871,  0.11110031,  0.64051174,  0.47164644,  0.25348374])

np.random.random(size=(2,3))
#array([[ 0.54926089,  0.80708799,  0.78781729],
#       [ 0.55809703,  0.64387581,  0.17245042]])

np.random.choice

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

参数

含义

a数组或者整数,如果是整数,则代表np.arange(a)
size返回结果的形状
replace样本是否可以重复出现
p与a中的每个条目相关联的概率。如果没有给出,则样本假定在a中的所有条目上均匀分布。

例子如下

import numpy as np

np.random.choice(5)
#4

np.random.choice(5,3)
#array([2, 0, 1])

#换成字符串也是可以得
np.random.choice(['a','b','c','d'],2)
#array(['c', 'a'], 
#       dtype='<U1')

numpy.random.bytes

numpy.random.bytes(length)

返回某一长度的随机字节。(内容简单就不放例子了)

numpy.random.uniform

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

从均匀分布中抽取样本,范围为[low,high)。默认值为low=0,high=1。

例子如下:

import numpy as np

np.random.uniform()
#0.24846054309343435

np.random.uniform(1,5,size=10)
#array([ 2.7566854 ,  4.46158096,  3.70401546,  2.30317974,  4.4519283 ,
#        1.72569099,  1.55306411,  1.81166724,  3.86637241,  3.59304843])

np.random.uniform(1,5,size=(2,3))
#array([[ 3.74527792,  4.11014239,  1.74790511],
#       [ 3.72700012,  4.71200736,  1.57848601]])

numpy.random.shuffle

numpy.random.shuffle(x)

沿多维数组的第一轴洗牌,子阵列的顺序已更改,但其内容保持不变。

例子如下:

import numpy as np

a = [1,2,3,4,5,6,7,8,9]
np.random.shuffle(a)
a
#[8, 6, 7, 4, 1, 5, 2, 3, 9]

numpy.random.RandomState

numpy.random.RandomState(seed=None)

伪随机数发生器的容器,做机器学习及模型训练时常常要用到。'

如果sizeNone,则生成并返回单个值。如果size是整数,则返回填充了生成值的1-D数组。如果size是一个元组,则填充并返回具有该形状的数组。

最后numpy的文档奉上Numpy.random

<think>好的,我现在需要详细介绍一下Python中NumPy库的random模块的、方法和函数。首先,我得回忆一下自己之前使用NumPy的经验,尤其是random模块的部分。记得NumPyrandom模块用于生成各种概率分布的随机数,这在数据科学和机器学习中非常常见。 首先,我应该先确定用户的需求是什么。用户可能希望了解random模块的结构,包括、方法以及函数的具体用途和示例。可能需要分几个部分来介绍,比如模块概述、主要的函数和方法、以及一些示例。 接下来,我需要考虑NumPy的版本问题,因为不同版本的NumPy可能在random模块的组织上有所不同。比如,在较新的版本中,推荐使用Generator对象而不是直接调用np.random下的函数,这是因为新的API更加灵活且功能更强大。因此,我应该提到RandomState和Generator这两个,并说明它们的关系和区别。 然后,我需要列出主要的函数和方法。例如,生成各种分布的随机数,如均匀分布、正态分布、泊松分布等。同时,可能还需要介绍一些常用的方法,比如shuffle、permutation用于打乱顺序,seed用于设置随机种子等。 在组织内容时,可能需要先介绍模块的整体结构,比如通过Generator来创建随机数生成器,然后通过不同的方法生成不同分布的随机数。接着,可以介绍legacy模块中的RandomState,以保持向后兼容性。 此外,还需要注意一些函数的使用示例,比如如何生成指定形状数组,如何指定分布的参数等。例如,使用normal函数生成正态分布的随机数时,需要指定均值、标准差和输出形状。 另外,用户可能对随机种子的设置感兴趣,所以应该提到如何通过seed函数或者Generator的构造函数来确保结果的可重复性。 可能还需要提到一些高级功能,比如选择不同的BitGenerator(如PCG64)来生成随机数,以及如何创建多个独立的随机数生成器实例。 在整理过程中,需要确保术语的准确性,比如区分函数和方法,避免混淆。例如,Generator的方法包括uniform、normal等,而顶层的np.random模块中的函数如rand、randn可能已经过时,建议使用新的Generator实例的方法。 同时,需要检查是否有遗漏的重要函数或方法,比如choice用于从数组中随机抽样,shuffle和permutation的区别,以及bytes生成随机字节等。 最后,需要组织内容的结构,使其清晰易读,分点列出各个部分,并给出示例代码,但用户要求不要使用Markdown格式,所以需要用中文描述结构,比如分节、列表等,但避免使用Markdown语法。同时,确保使用正确的LaTeX格式,比如数学表达式用$...$包裹,独立公式用$$...$$。 现在需要确认是否有遗漏的部分,比如是否提到了所有主要的分布函数,是否说明了Generator和RandomState的区别,是否提到了设置种子和创建多个生成器实例的方法,以及可能的一些常见用例。 总结一下,结构大致如下: 1. 模块概述:介绍NumPyrandom模块及其新旧API的区别。 2. Generator:创建生成器实例,使用不同的BitGenerator。 3. 常用方法:各种分布的随机数生成方法,如uniform、normal、poisson等。 4. 其他函数和方法:如shuffle、permutation、choice、seed等。 5. 示例代码:演示如何生成不同分布的随机数,设置种子等。 6. 注意事项:比如旧版RandomState的使用,推荐使用新的Generator等。 在写作过程中,需要确保每个部分详细但不过于冗长,示例代码准确,并且符合中文表达习惯。同时,检查是否有错误,比如函数参数是否正确,分布参数是否准确(如正态分布的均值标准差,均匀分布的区间等)。</think>NumPy的`random`模块是生成伪随机数的核心工具,广泛应用于科学计算和数据分析。以下内容基于NumPy 1.17+版本的新API结构,分为******方法****函数**三部分说明: --- ### **一、(Classes)** 1. **`Generator`**(推荐使用) - **作用**:通过底层BitGenerator生成各种分布的随机数。 - **创建方式**:使用`default_rng()`函数实例化。 - **示例**: ```python from numpy.random import default_rng rng = default_rng(seed=42) # 指定种子确保可重复性 ``` 2. **`RandomState`**(旧版,不推荐) - **作用**:旧版随机数生成器,用于兼容旧代码。 - **创建方式**:直接实例化`RandomState`。 - **示例**: ```python from numpy.random import RandomState rs = RandomState(seed=42) ``` --- ### **二、Generator方法(常用分布)** 通过`Generator`实例调用以下方法生成不同分布的随机数: 1. **均匀分布** - **`.uniform(low=0.0, high=1.0, size=None)`** 区间$[low, high)$内的均匀分布。 2. **正态分布** - **`.normal(loc=0.0, scale=1.0, size=None)`** 均值$loc$,标准差$scale$的正态分布$N(\mu, \sigma^2)$。 3. **泊松分布** - **`.poisson(lam=1.0, size=None)`** 参数为$\lambda$的泊松分布$P(\lambda)$。 4. **二项分布** - **`.binomial(n, p, size=None)`** 参数为$n$次试验、成功概率$p$的二项分布$B(n, p)$。 5. **其他分布** - 指数分布(`.exponential`)、卡方分布(`.chisquare`)、伽马分布(`.gamma`)等。 --- ### **三、顶层函数(Legacy Functions)** 旧版`np.random`模块直接提供的函数(基于`RandomState`): 1. **基础随机数** - **`rand(d0, d1, ..., dn)`** 生成$[0,1)$均匀分布的数组形状为$(d0, d1, ..., dn)$。 - **`randn(d0, d1, ..., dn)`** 标准正态分布$N(0,1)$的数组2. **整数随机数** - **`randint(low, high=None, size=None)`** 生成$[low, high)$区间内的随机整数。 3. **随机抽样** - **`shuffle(x)`**:原地打乱序列顺序。 - **`permutation(x)`**:返回打乱后的副本,原序列不变。 - **`choice(a, size=None, replace=True, p=None)`**数组$a$中按概率$p$抽样,`replace`控制是否放回。 4. **种子设置** - **`seed(seed=None)`**:初始化随机数生成器。 --- ### **四、完整示例** ```python import numpy as np from numpy.random import default_rng # 创建Generator实例 rng = default_rng(seed=42) # 生成正态分布样本 samples = rng.normal(loc=0, scale=1, size=1000) # 生成10个[0,10)的整数 integers = rng.integers(0, 10, size=10) # 从列表随机选择(无放回) choices = rng.choice(['a', 'b', 'c'], size=2, replace=False) ``` --- ### **五、注意事项** 1. **新旧API区别**:新版本推荐使用`Generator`而非直接调用`np.random.*`函数。 2. **性能**:新API基于PCG64算法,随机性质量更高。 3. **并行安全**:可通过创建多个`Generator`实例避免多线程冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值