V.M*_*dev 2 python random random-seed
有没有办法控制 random.sample()?我以标准方式修复种子:
def seed_everything(seed=42):
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
seed_everything(42)
Run Code Online (Sandbox Code Playgroud)
然而,下面代码的结果每次都不同:
idxT=[0,1,2,3,4,5,6]
idxT = [
idxT[j] for j in sorted(random.sample(range(len(idxT)), 3))
]
idxT
Run Code Online (Sandbox Code Playgroud)
我认为 Ry 走在正确的轨道上:如果您希望random.sample()每次调用时的返回值都相同,则必须random.seed()在每次调用之前使用相同的值进行调用random.sample()。
下面举三个简化的例子来说明:
random.seed(42)
idxT = [0,1,2,3,4,5,6]
for _ in range(2):
for _ in range(3):
print(random.sample(idxT, 3))
print()
Run Code Online (Sandbox Code Playgroud)
输出:
[5, 0, 6]
[5, 2, 1]
[1, 6, 0]
[5, 6, 4]
[0, 4, 3]
[0, 6, 5]
Run Code Online (Sandbox Code Playgroud)
idxT = [0,1,2,3,4,5,6]
for _ in range(2):
random.seed(42)
for _ in range(3):
print(random.sample(idxT, 3))
print()
Run Code Online (Sandbox Code Playgroud)
输出:
[5, 0, 6]
[5, 2, 1]
[1, 6, 0]
[5, 0, 6]
[5, 2, 1]
[1, 6, 0]
Run Code Online (Sandbox Code Playgroud)
idxT = [0,1,2,3,4,5,6]
for _ in range(2):
for _ in range(3):
random.seed(42)
print(random.sample(idxT, 3))
print()
Run Code Online (Sandbox Code Playgroud)
输出:
[5, 0, 6]
[5, 0, 6]
[5, 0, 6]
[5, 0, 6]
[5, 0, 6]
[5, 0, 6]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3664 次 |
| 最近记录: |