gpt4 book ai didi

python - 奇怪的 numpy 随机洗牌和种子

转载 作者:行者123 更新时间:2023-12-05 06:29:09 25 4
gpt4 key购买 nike

<分区>

我有一个关于 numpy 的随机问题,尤其是 shuffle 和 seed。

'seed'用于生成相同的随机序列。

'shuffle' 用于洗牌。

要以相同顺序打乱两个列表,此代码有效:

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 : True

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com