3. 生成随机数组并设置种子
任务说明
本案例要求使用NumPy的np.random模块生成随机数组,并通过设置随机种子(seed)确保每次运行得到相同的结果。随机数在数据分析中常用于模拟数据、初始化参数或抽样,而可复现性是科学计算和工程实践的基本要求。
核心实现
以下代码演示了三种常用随机数组的生成方式:均匀分布、标准正态分布和随机整数数组。通过np.random.seed()固定随机数生成器的初始状态,使得多次执行脚本时输出完全一致。
import numpy as np
# 设置随机种子,保证结果可复现
np.random.seed(42)
# 1. 生成形状为 (3, 4) 的 [0, 1) 均匀分布随机数组
uniform_arr = np.random.rand(3, 4)
print("均匀分布随机数组 (3x4):")
print(uniform_arr)
# 2. 生成形状为 (2, 3) 的标准正态分布随机数组(均值0,标准差1)
normal_arr = np.random.randn(2, 3)
print("\n标准正态分布随机数组 (2x3):")
print(normal_arr)
# 3. 生成形状为 (5,) 的 [0, 10) 区间随机整数数组
int_arr = np.random.randint(0, 10, size=5)
print("\n随机整数数组 (5,):")
print(int_arr)
# 4. 验证:重新设置相同种子,再次生成应得到完全相同的数组
np.random.seed(42)
uniform_arr_again = np.random.rand(3, 4)
print("\n重新设置种子后再次生成的均匀分布数组:")
print(uniform_arr_again)
print("\n两次生成结果是否一致:", np.array_equal(uniform_arr, uniform_arr_again))
关键说明
np.random.seed(42)中的参数42是任意整数,只要种子相同,后续随机序列就相同。np.random.rand(d0, d1, ...)生成[0, 1)区间均匀分布数组;np.random.randn(d0, d1, ...)生成标准正态分布数组;np.random.randint(low, high, size)生成[low, high)区间随机整数数组。- 种子设置必须位于所有随机生成调用之前,且每次需要复现时都要重新设置。
运行与验证
将上述代码保存为random_seed_demo.py,在已安装NumPy的Python环境中执行:
python random_seed_demo.py
判定标准:
- 程序正常输出四组数组,无报错。
- 第1步与第4步输出的均匀分布数组完全相同,且最后一行打印
True。 - 再次运行脚本,所有输出与第一次运行完全一致,证明随机种子生效。
随机种子机制示意
预期输出
由于设置了固定种子42,每次运行脚本都会得到以下完全相同的输出(以NumPy 1.x版本为准):
均匀分布随机数组 (3x4):
[[0.37454012 0.95071431 0.73199394 0.59865848]
[0.15601864 0.15599452 0.05808361 0.86617615]
[0.60111501 0.70807258 0.02058449 0.96990985]]
标准正态分布随机数组 (2x3):
[[ 0.95008842 -0.15135721 -0.10321885]
[ 0.4105985 0.14404357 1.45427351]]
随机整数数组 (5,):
[6 3 7 4 6]
重新设置种子后再次生成的均匀分布数组:
[[0.37454012 0.95071431 0.73199394 0.59865848]
[0.15601864 0.15599452 0.05808361 0.86617615]
[0.60111501 0.70807258 0.02058449 0.96990985]]
两次生成结果是否一致: True
以上输出为确定性结果,由种子42唯一决定。若更换种子值,输出将随之改变,但同一种子下的输出始终保持一致。