NumPy - 随机数生成器
NumPy 随机数生成器
NumPy 中的随机数生成器用于生成随机数并执行随机采样。
NumPy 中的随机模块提供了丰富的随机数生成函数,从生成随机整数和浮点数,到更复杂的分布,例如正态分布、均匀分布和二项分布。
在本教程中,我们将探索如何使用 NumPy 随机数生成器生成随机数据,并讨论该模块中的重要函数。
NumPy 随机模块?
NumPy 随机模块是 NumPy 库中的一个子模块,包含用于生成随机数、执行随机采样和生成随机分布的函数。它提供了 numpy.random 包,支持根据各种概率分布(例如均匀分布、正态分布和二项分布)创建随机数。
使用 NumPy 的随机数生成器,我们可以生成可用于模拟、随机测试甚至加密操作的随机值。生成的随机数是伪随机的,这意味着它们是通过确定性过程生成的,但看起来是随机的。
可以使用随机种子控制随机数序列,从而确保模拟和实验的可重复性。
NumPy 的随机数生成器如何工作?
NumPy 随机数生成器建立在名为梅森旋转算法 (Mersenne Twister) 的伪随机数生成器 (PRNG) 算法之上。 PRNG 的关键特性在于它能够生成接近真随机性的数列,但该数列由一个初始值(称为种子)决定。
通过设置相同的种子,可以确保每次运行代码时生成的随机数序列都相同,这对于科学实验的可重复性至关重要。
设置随机数生成器的种子
为了控制随机数生成过程,NumPy 提供了 numpy.random.seed() 函数,该函数用于设置随机数生成器的种子。这使得每次运行程序时都能生成相同的随机数。
示例
在下面的示例中,通过设置相同的种子值(本例中为 42),我们每次运行代码时都会得到相同的随机数序列。这有助于确保实验和调试过程中的一致性 -
import numpy as np # 设置种子以确保可重复性 np.random.seed(42) # 生成随机数 random_numbers_1 = np.random.random(5) # 使用相同的种子生成相同的随机数 np.random.seed(42) random_numbers_2 = np.random.random(5) # 显示结果 print("第一个随机数:", random_numbers_1) print("第二个随机数:", random_numbers_2)
以下是获得的输出 -
第一个随机数:[0.37454012 0.95071431 0.73199394 0.59865848 0.15601864] 第二个随机数:[0.37454012 0.95071431 0.73199394 0.59865848 0.15601864]
生成随机数
NumPy 提供了各种生成随机数的函数。这里,我们将探讨一些最常用的函数 -
随机浮点数
numpy.random.random() 函数生成介于 0 和 1 之间的随机浮点数。您可以通过传递所需的维度作为参数来指定输出数组的形状。例如 -
import numpy as np # 生成 5 个介于 0 到 1 之间的随机浮点数 random_floats = np.random.random(5) print("随机浮点数:", random_floats)
生成的结果如下 -
随机浮点数:[0.96177309 0.75071326 0.44828032 0.53441928 0.56717514]
随机整数
numpy.random.randint() 函数用于生成指定范围内的随机整数。您可以指定最低值和最高值,它将返回介于最低值(含)和最高值(不含)之间的整数。以下是示例 -
import numpy as np # 生成 5 个介于 10(含)和 100(不含)之间的随机整数 random_integers = np.random.randint(10, 100, size=5) print("随机整数:", random_integers)
执行上述代码后,我们得到以下输出 -
随机整数:[13 38 56 94 78]
基于正态分布的随机数
numpy.random.normal() 函数生成服从正态(高斯)分布且具有指定均值和标准差的随机数。您还可以指定输出数组的大小。工作原理如下:-
import numpy as np # 生成 5 个服从正态分布的随机数,其中均值为 0,标准差为 1 random_normal = np.random.normal(0, 1, 5) print("服从正态分布的随机数:", random_normal)
输出结果如下:-
服从正态分布的随机数:[ 0.52379705 0.3169246 0.76473415 -0.73006407 -0.50259886]
服从均匀分布的随机数
numpy.random.uniform() 函数生成随机给定范围内的均匀分布的数字。下面是一个生成 5 个介于 1.0 和 10.0 之间的随机数的示例 -
import numpy as np # 生成 5 个介于 1.0 和 10.0 之间的随机数 random_uniform = np.random.uniform(1.0, 10.0, 5) print("均匀分布的随机数:", random_uniform)
生成的结果如下 -
均匀分布的随机数:[4.92412702 2.57524084 1.71870242 3.71017627 6.19920522]
使用替换
有时,我们需要从数组中随机选择元素。 NumPy 提供了 numpy.random.choice() 函数,允许您执行有放回或无放回的随机抽样。
示例
在下面的示例中,该函数从数组中放回地随机选择 3 个元素,这意味着元素可以多次选择 -
import numpy as np # 定义一个元素数组 array = np.array([1, 2, 3, 4, 5]) # 从数组中随机选择 3 个元素,并进行放回 sample_with_replacement = np.random.choice(array, 3, replace=True) print("有放回的随机样本:", sample_with_replacement)
结果如下 -
有放回的随机样本:[5 3 5]
数组打乱
另一个有用的操作是随机打乱数组元素。NumPy 提供了 numpy.random.shuffle() 函数来实现此目的。它对数组元素进行随机原地置换。
示例
在下面的示例中,我们使用 NumPy 中的 numpy.random.shuffle() 函数对数组进行打乱 -
import numpy as np # 定义一个数组 array = np.array([1, 2, 3, 4, 5]) # 原地打乱数组 np.random.shuffle(array) print("打乱后的数组:", array)
得到的输出如下所示 -
打乱后的数组:[4 2 3 5 1]