numpy中生成随机数的几种常用函数(小结)

1. numpy.random.rand()

numpy.random.rand()函数用于生成[0,1)之间的随机数,它的函数原型如下:

numpy.random.rand(d0, d1, ..., dn)

其中d0, d1, ..., dn表示生成的随机数的维度。例如,如果我们想要生成一个2行3列的随机数矩阵,代码如下:

import numpy as np

random_mat = np.random.rand(2, 3)

print(random_mat)

生成的结果如下所示:

array([[0.71698514, 0.63088949, 0.03998119],

[0.75986719, 0.60135355, 0.81481106]])

1.1 使用rand()函数生成正态分布的随机数

可以使用 $u + \sigma \times \text{randn}(m, n)$ 公式,生成均值为$u$,方差为$\sigma$的正态分布的随机数。

a = 4

b = 2

n = 10

sample = a + b * np.random.randn(n)

print(sample)

其中,$a=4$,$b=2$,$n=10$,生成的结果如下所示:

array([3.30160974, 5.27347812, 5.42418569, 4.56571726, 2.12586805,

5.19984681, 3.49166583, 1.37797782, 5.77928484, 2.98007356])

2. numpy.random.randn()

numpy.random.randn()函数用于生成符合标准正态分布的随机数,它的函数原型如下:

numpy.random.randn(d0, d1, ..., dn)

其中d0, d1, ..., dn表示生成的随机数的维度,该函数生成的随机数非常类似于np.random.rand()函数生成的随机数,不过np.random.randn()函数生成的随机数在整个实数轴范围内,而np.random.rand()函数生成的随机数仅在[0,1)范围内,如果我们想要生成一个2行3列的正态分布的随机数矩阵,代码如下:

import numpy as np

random_mat = np.random.randn(2, 3)

print(random_mat)

生成的结果如下所示:

array([[-1.50170304,  0.49522311,  2.03755081],

[ 1.7656883 , 0.64171569, 1.79218428]])

3. numpy.random.randint()

numpy.random.randint()函数用于生成指定范围内的随机整数,它的函数原型如下:

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

其中,low表示最小的随机整数,high表示最大的随机整数(不包含),size表示生成的随机数的维度,dtype表示生成的随机数的类型,默认值为l,表示随机整数,如果我们想要生成一个1行5列的区间为[0,10)的随机整数矩阵,代码如下:

import numpy as np

random_int_mat = np.random.randint(0, 10, (1, 5), dtype='l')

print(random_int_mat)

生成的结果如下所示:

array([[1, 3, 1, 3, 4]])

3.1 生成重复的随机数

如果我们想要生成5个随机数,其中有3个是重复的,那么可以使用numpy.random.choice()函数,代码如下所示:

import numpy as np

random_num = np.random.choice([1, 2, 3], size=(5,), replace=True)

print(random_num)

其中,[1, 2, 3]表示可选的随机数范围,size表示生成的随机数的个数,replace=True表示生成的随机数可以重复,如果replace=False表示生成的随机数不可重复。生成的结果如下所示:

array([1, 2, 1, 1, 1])

4. numpy.random.uniform()

numpy.random.uniform()函数用于生成在指定范围内的随机浮点数,它的函数原型如下:

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

其中,low表示最小的随机数,high表示最大的随机数,size表示生成的随机数的维度,如果我们想要生成一个2行2列的[0,1)范围内的随机浮点数矩阵,代码如下所示:

import numpy as np

random_float_mat = np.random.uniform(low=0.0, high=1.0, size=(2,2))

print(random_float_mat)

生成的结果如下所示:

array([[0.50290756, 0.84616209],

[0.31310999, 0.30772448]])

4.1 生成带权重的随机数

如果我们想要生成一个带权重的随机数,可以使用numpy.random.choice()函数,代码如下所示:

import numpy as np

weights = [0.2, 0.3, 0.5]

random_num = np.random.choice([1, 2, 3], size=(5,), replace=True, p=weights)

print(random_num)

其中,weights表示每个随机数的权重值,p表示每个随机数的选中概率,生成的结果如下所示:

array([3, 2, 2, 3, 3])

5. numpy.random.shuffle()

numpy.random.shuffle()函数用于打乱一个序列,它的函数原型如下:

numpy.random.shuffle(x)

其中,x表示要打乱的序列,该函数直接改变了原序列,因此返回值为None,如果我们想要打乱一个长度为5的序列[1, 2, 3, 4, 5],代码如下所示:

import numpy as np

num_list = [1, 2, 3, 4, 5]

np.random.shuffle(num_list)

print(num_list)

生成的结果如下所示:

[5, 1, 3, 4, 2]

5.1 打乱多维数组的行

如果我们想要打乱多维数组的行,可以使用numpy.random.permutation()函数,代码如下所示:

import numpy as np

arr = np.asarray([

[1, 2, 3],

[4, 5, 6],

[7, 8, 9]

])

np.random.shuffle(arr)

print(arr)

生成的结果如下所示:

array([[4, 5, 6],

[7, 8, 9],

[1, 2, 3]])

总结:numpy库中提供了众多生成随机数的函数,这些函数能够帮助数据科学家在数据预处理、模型评估、数据增强等场合,产生所需的随机数,从而更好地完成数据处理和分析的任务。需要注意的是,生成随机数时,我们需要设定随机数的生成范围、大小以及类型等参数,同时numpy库中提供的函数有类似的功能,我们需要根据实际情况进行选择。

后端开发标签