1、生成随机数
1)均匀分布随机数
numpy.random.rand(d0, d1, ..., dn)
:生成在 [0, 1) 区间的均匀分布随机数。d0, d1, ..., dn
:表示生成随机数的维度。
numpy.random.randint(low, high=None, size=None, dtype=int)
:生成指定范围的随机整数。
参数说明:
参数 | 说明 |
low | 指定随机数的最小值。 |
high | 指定随机数的最大值。如果省略,则 high 默认为 low + 1。 |
size | 指定生成随机数的个数。如果省略,则 size 默认为 1。 |
dtype | 指定随机数的数据类型。 |
代码如下,
import numpy as np a = np.random.rand(3, 2) print(a) a = np.random.randint(10, size=5) print(a) a = np.random.randint(1, 10, size=(3, 2)) print(a)
2)正态分布随机数
numpy.random.randn(d0, d1, ..., dn)
:生成标准正态(均值0,标准差1)分布的随机数。d0, d1, ..., dn
:表示生成随机数的维度。
numpy.random.normal(loc=0.0, scale=1.0, size=None)
:生成正态分布的随机数,可指定均值和标准差。
参数说明:
参数 | 说明 |
loc | 指定均值。 |
scale | 指定标准差。 |
size | 指定生成随机数的个数。 如果省略,则 size 默认为 1。 |
代码如下,
import numpy as np a = np.random.randn(3, 2) print(a) a = np.random.normal(loc=5, scale=2, size=5) print(a)
区别:numpy.random.randn(d0, d1, ..., dn)
生成的随机数的均值为 0、标准差为 1。numpy.random.normal(loc=0.0, scale=1.0, size=None)
生成的随机数的均值可以指定,标准差为 1。
3)二项分布随机数
numpy.random.binomial(n, p, size=None)
:生成二项分布随机数。
参数说明:
参数 | 说明 |
n | 试验次数。 |
p | 每次试验成功的概率。 |
size | 要生成的随机数个数。 |
代码如下,
import numpy as np # 生成 5 个从二项分布中抽取的随机数,试验次数为 10,每次试验成功的概率为 0.5。 samples = np.random.binomial(n=10, p=0.5, size=5) print(samples)
4)泊松分布随机数
numpy.random.poisson(lam=1.0, size=None)
:生成泊松分布随机数。
参数说明:
参数 | 说明 |
lam | 固定区间内平均发生事件的次数。 |
size | 要生成的随机数个数。 |
代码如下,
import numpy as np # 生成 10 个从泊松分布中抽取的随机数,固定区间内平均发生事件的次数为 3。 samples = np.random.poisson(lam=3, size=10) print(samples)
5)分布随机数
numpy.random.exponential(scale=1.0, size=None)
:生成指数分布随机数。
参数说明:
参数 | 说明 |
scale | 指数分布的参数。 |
size | 要生成的随机数个数。 |
代码如下,
import numpy as np # 生成 5 个从指数分布中抽取的随机数,指数分布的参数为 1。 samples = np.random.exponential(scale=1, size=5) print(samples)
2、随机抽样和洗牌
可以使用NumPy库可以轻松地进行随机抽样和洗牌。常用函数如下,
1)随机抽样
numpy.random.choice(a, size=None, replace=True, p=None)
:从给定的一维数组或整数范围中随机抽样。
参数说明:
参数 | 说明 |
a | 指定要抽取元素的序列。 |
size | 指定要抽取的元素个数。 如果省略,则 size 默认为 1。 |
replace | 指定是否允许重复抽取。 如果为 True,则允许重复抽取; 如果为 False,则不允许重复抽取。 |
p | 指定每个元素被抽取的概率。 如果省略,则每个元素的概率相同。 |
代码如下,
import numpy as np a = [1, 2, 3, 4, 5] # 随机抽取一个元素 b = np.random.choice(a) print(b) a = [1, 2, 3, 4, 5] # 随机抽取三个元素,允许重复抽取 b = np.random.choice(a, size=3) print(b) a = [1, 2, 3, 4, 5] # 随机抽取三个元素,不允许重复抽取 b = np.random.choice(a, size=3, replace=False) print(b) a = [1, 2, 3] # 随机抽取三个元素,每个元素的概率为 1/3 b = np.random.choice(a, size=3, p=[1/3, 1/3, 1/3]) print(b)
2)洗牌和排列
numpy.random.shuffle(x)
:对数组 x 进行原地洗牌(改变数组本身的顺序),于将序列 x 中的元素随机打乱。x
:指定要打乱的序列。
numpy.random.permutation(x)
:返回数组 x 的一个随机排列或返回一个随机排列的范围。x
:指定要排列的序列。
import numpy as np a = [1, 2, 3, 4, 5] np.random.shuffle(a) print(a) a = [1, 2, 3, 4, 5] b = np.random.permutation(a) print(b)
3、设置随机数种子
numpy.random.seed(seed=None)
:通过设置随机数种子,可以确保随机数生成器的可重复性。seed
:指定种子。如果省略,则使用系统时间作为种子。
import numpy as np # 设置随机数生成器的种子为 5411 np.random.seed(5411) # 生成随机数 a = np.random.rand(5) print(a) # 设置随机数生成器的种子为 5411 np.random.seed(5411) # 生成随机数 a = np.random.rand(5) print(a) # 再次运行程序 np.random.seed(5411) b = np.random.rand(5) print(b)