Numpy中同种子下数组减1结果不一致的问题咨询
Numpy中同种子下数组减1结果不一致的问题咨询
嘿,我来帮你搞明白这个问题~你之所以会得到不同的结果,核心原因是Numpy的随机数生成器状态是会“前进”的,不是设置一次种子就永远重复输出同一个随机数组哦。
咱们先对照你的代码来分析:
Case 1的运行逻辑
你这段代码里,设置np.random.seed(2)初始化随机数生成器后,只调用了一次np.random.random((3,1)),把生成的数组存在array变量里。后面打印array和array-1,用的都是同一个数组,所以结果完全符合预期:
import numpy as np np.random.seed(2) array = np.random.random((3,1)) print('Printing array : \n', array) print('printing array - 1 : \n',array-1)
输出:
Printing array : [[0.4359949 ] [0.02592623] [0.54966248]] printing array - 1 : [[-0.5640051 ] [-0.97407377] [-0.45033752]]
Case 2的问题所在
如果你的Case 2代码是在Case 1之后运行的,那这时候随机数生成器的状态已经被Case 1里的那次random调用改变了——因为每次调用np.random.random()都会消耗生成器里的“随机状态”,生成下一组新的随机数。这时候你再调用np.random.random((3,1)),拿到的是种子初始化后接下来的3个随机数,而不是和Case 1里一样的那组,所以减1后的结果自然不一样:
print('Printing array : \n', np.random.random ((3,1))-1)
输出:
Printing array : [[-0.56467761] [-0.5796322 ] [-0.66966518]]
解决办法
如果你想让Case 2得到和Case 1里array-1一样的结果,有两种简单的方式:
- 方式一:在Case 2之前重新设置一次随机种子,让生成器回到初始状态:
np.random.seed(2) print('Printing array : \n', np.random.random ((3,1))-1)
- 方式二:直接复用Case 1里已经生成好的
array变量,避免重复调用随机数生成函数:
print('Printing array : \n', array-1)
你可以试试在同一个脚本里,连续调用两次np.random.random((3,1))(中间不重置种子),就能直观看到生成的数组完全不同,这就是随机数生成器状态前进的体现啦。
备注:内容来源于stack exchange,提问作者srajan
相关产品推荐
相关产品推荐

