Python 的 NumPy 库提供了一个强大的 numpy.random 模块,生成满足不同统计分布的随机数,进行随机抽样,以及对数组元素进行随机排列。还用于生成符合各种统计分布的随机数,这在模拟、数据分析、机器学习等领域非常有用。由于 NumPy 底层是用 C 语言编写的,因此它在生成大量随机数时比纯 Python 快得多。

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)

推荐文档