NumPy - 随机生成器
NumPy 随机生成器
NumPy 中的随机生成器用于生成随机数和执行随机采样。
NumPy 的 random 模块提供了广泛的随机数生成函数,从生成随机整数和浮点数,到更复杂的分布如正态分布、均匀分布和二项分布。
在本教程中,我们将探讨如何使用 NumPy Random Generator 生成随机数据,并讨论该模块中可用的重要函数。
什么是 NumPy Random 模块?
NumPy random 模块是 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("First random numbers:", random_numbers_1)
print("Second random numbers:", random_numbers_2)
以下是获得的结果 −
First random numbers: [0.37454012 0.95071431 0.73199394 0.59865848 0.15601864] Second random numbers: [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 float numbers:", random_floats)
产生的结果如下 −
Random float numbers: [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:", random_integers)
执行上述代码后,我们得到以下输出 −
Random integers: [13 38 56 94 78]
来自正态分布的随机数
numpy.random.normal() 函数从具有指定均值和标准差的正态(高斯)分布中生成随机数。您还可以指定输出数组的大小。其工作方式如下 −
import numpy as np
# 从均值为 0、标准差为 1 的正态分布中生成 5 个随机数
random_normal = np.random.normal(0, 1, 5)
print("Random numbers from normal distribution:", random_normal)
得到输出如下 −
Random numbers from normal distribution: [ 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 numbers from uniform distribution:", random_uniform)
产生的结果如下 −
Random numbers from uniform distribution: [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("Random sample with replacement:", sample_with_replacement)
产生的结果如下 −
Random sample with replacement: [5 3 5]
打乱数组
另一个有用的操作是随机打乱数组的元素。NumPy 提供了 numpy.random.shuffle() 函数来实现此目的。它会就地随机置换数组的元素。
示例
在以下示例中,我们使用 numpy.random.shuffle() 函数在 NumPy 中打乱一个数组 −
import numpy as np
# 定义一个数组
array = np.array([1, 2, 3, 4, 5])
# 就地打乱数组
np.random.shuffle(array)
print("Shuffled array:", array)
得到输出如下 −
Shuffled array: [4 2 3 5 1]