我有一个关于随机数(特别是随机播放和种子)的问题。
'seed'用于生成相同的随机序列。
“随机播放”用于混排某些内容。
要以相同顺序随机排列两个列表,此代码可以正常工作:
idx = [1, 2, 3, 4, 5, 6]
idx2 = [1, 2, 3, 4, 5, 6]
seed = np.random.randint(0, 100000)
np.random.seed(seed)
np.random.shuffle(idx)
np.random.seed(seed)
np.random.shuffle(idx2)
结果:
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
[5, 3, 1, 2, 4, 6] [5, 3, 1, 2, 4, 6]
[1, 5, 3, 2, 4, 6] [1, 5, 3, 2, 4, 6]
[2, 5, 3, 4, 6, 1] [2, 5, 3, 4, 6, 1]
[2, 5, 6, 3, 4, 1] [2, 5, 6, 3, 4, 1]
[4, 5, 6, 1, 2, 3] [4, 5, 6, 1, 2, 3]
我可以检查一下此代码是否工作正常。
...省略
已解决,但问题不清楚。
重新定义简化版本中的问题:
idx = [1, 2, 3, 4, 5, 6]
for i in range(10):
seed = np.random.randint(0, 10000)
idx2 = [1, 2, 3, 4, 5, 6]
np.random.seed(seed)
np.random.shuffle(idx)
np.random.seed(seed)
np.random.shuffle(idx2)
然后,对于每次迭代,idx!= idx2都是清除的。
-问题是这样的:为什么idx和idx2不相同?
但是,我没有注意到idx2的重新初始化。 (实际上,原始代码并非如此简单-每次迭代,idx2都会获得新的图像目录。-答案中的“ imlist”在简化版本中起着与idx2相同的作用。)
阅读@tel的评论后,我发现了问题。 -idx也应该重新初始化,或者只使用基于索引的改组。
固定版本
for i in range(10):
seed = np.random.randint(0, 10000)
idx2 = [1, 2, 3, 4, 5, 6]
idx = [1, 2, 3, 4, 5, 6]
np.random.seed(seed)
np.random.shuffle(idx)
np.random.seed(seed)
np.random.shuffle(idx2)
然后,idx == idx2:是
答案 0 :(得分:0)
因此,正如您所说,对imlist
所做的更改似乎引起了混乱。 ix1
和ix2
彼此继续保持同步变化,但是imlist
的顺序在每个循环开始时都会刷新。例如,由于ix1
和imlist
在大多数循环(除了第一个循环)的开始都以不同的顺序开始,所以毫无疑问,随机播放将以不同的顺序将它们置于随机种子。