NumPy random 模块随机数生成常用方法汇总

NumPy 的 random 模块提供了丰富的随机数生成函数,可以满足各种需求。它主要分为以下几个部分:

  • 简单随机数生成: 生成均匀分布、正态分布等的随机数。
  • 排列: 对序列进行随机排列。
  • 分布: 生成各种概率分布的随机数,如二项分布、泊松分布等。
  • 生成器: 用于控制随机数生成的种子。

图片

1. 生成均匀分布的随机数

均匀分布是指在给定区间内,每个数值出现的概率相等。NumPy 提供了以下函数生成均匀分布的随机数:

  • random.rand():生成 [0, 1) 之间的均匀分布随机数。
  • random.random_sample() / random.random() / random.ranf() / random.sample():功能与 random.rand() 类似,都是生成 [0, 1) 之间的均匀分布随机数。
  • random.uniform():生成指定区间内的均匀分布随机数。
import numpy as np

# 生成一个 [0, 1) 之间的随机浮点数
random_float = np.random.rand()
print(f"一个随机浮点数:{random_float}")

# 生成一个包含 5 个 [0, 1) 之间随机浮点数的一维数组
random_array_1d = np.random.rand(5)
print(f"一维随机数组:{random_array_1d}")

# 生成一个 2x3 的二维数组,其中的元素是 [0, 1) 之间的随机浮点数
random_array_2d = np.random.rand(2, 3)
print(f"二维随机数组:\n{random_array_2d}")

# 使用 random.uniform() 生成指定区间的随机数
# 生成 10 个 [-5, 5) 之间的随机数
random_uniform = np.random.uniform(-5, 5, 10)
print(f"指定区间的随机数:{random_uniform}")

2. 生成正态分布(高斯分布)的随机数

正态分布是一种常见的概率分布,其形状呈钟形。NumPy 提供了以下函数生成正态分布的随机数:

  • random.randn():生成服从标准正态分布(均值为 0,标准差为 1)的随机数。
  • random.normal():生成指定均值和标准差的正态分布随机数。
import numpy as np

# 生成一个服从标准正态分布的随机数
random_normal = np.random.randn()
print(f"一个标准正态分布随机数:{random_normal}")

# 生成一个包含 4 个服从标准正态分布随机数的一维数组
random_normal_array = np.random.randn(4)
print(f"标准正态分布随机数组:{random_normal_array}")

# 使用 random.normal() 生成指定均值和标准差的正态分布随机数
# 生成 10 个均值为 5,标准差为 2 的正态分布随机数
random_normal_custom = np.random.normal(5, 2, 10)
print(f"自定义均值和标准差的正态分布随机数:{random_normal_custom}")

3. 生成随机整数

NumPy 提供了 random.randint() 函数生成指定范围内的随机整数。

import numpy as np

# 生成一个 [0, 10) 之间的随机整数
random_int = np.random.randint(10) # 不包含10
print(f"一个随机整数(不包含10):{random_int}")

# 生成一个 [5, 15) 之间的随机整数
random_int_range = np.random.randint(5, 15) # 不包含15
print(f"指定范围的随机整数(不包含15):{random_int_range}")

# 生成一个包含 6 个 [0, 100) 之间随机整数的一维数组
random_int_array = np.random.randint(0, 100, 6) # 不包含100
print(f"随机整数数组(不包含100):{random_int_array}")

# 生成一个 3x4 的二维数组,其中的元素是 [1, 5) 之间的随机整数
random_int_array_2d = np.random.randint(1, 5, size=(3, 4)) # 不包含5
print(f"二维随机整数数组(不包含5):\n{random_int_array_2d}")

4. 从给定数组中随机选择元素

random.choice() 函数可以从给定的数组中随机选择元素。

import numpy as np

# 从给定数组中随机选择一个元素
arr = np.array([1, 2, 3, 4, 5])
random_choice = np.random.choice(arr)
print(f"随机选择的元素:{random_choice}")

# 从给定数组中随机选择 3 个元素,允许重复选择
random_choices_with_replacement = np.random.choice(arr, size=3, replace=True)
print(f"随机选择的 3 个元素(允许重复):{random_choices_with_replacement}")

# 从给定数组中随机选择 2 个元素,不允许重复选择
random_choices_without_replacement = np.random.choice(arr, size=2, replace=False)
print(f"随机选择的 2 个元素(不允许重复):{random_choices_without_replacement}")

# 给定每个元素被选择的概率
probabilities = [0.1, 0.2, 0.3, 0.2, 0.2]
random_choice_with_probabilities = np.random.choice(arr, p=probabilities)
print(f"按概率随机选择的元素:{random_choice_with_probabilities}")

5. 设置随机数种子

使用 random.seed() 函数可以设置随机数生成器的种子。设置相同的种子可以保证每次运行程序时生成的随机数序列相同,这在需要重复实验或调试程序时非常有用。

import numpy as np

# 设置随机数种子
np.random.seed(0)

# 生成一组随机数
random_numbers_1 = np.random.rand(3)
print(f"第一组随机数:{random_numbers_1}")

# 再次设置相同的种子
np.random.seed(0)

# 生成另一组随机数,与第一组相同
random_numbers_2 = np.random.rand(3)
print(f"第二组随机数:{random_numbers_2}")

以上就是 NumPy 中常用的随机数据生成方法。

来源:Python学习杂记

THE END