如何调用与先前迭代相同的随机值?

时间:2019-01-06 16:05:13

标签: python

我正在这样做:

random.randint(90, 110)

很基本,随机返回90到110之间的值。

但是,我将代码运行30次,并且我希望在前10个迭代中更改这些随机值,但我希望接下来的10个更改与前10个迭代相同的方式(例如,第11个/ 21st迭代与1st迭代相同,第12 / 22nd = 2nd,等等。

我尝试使用random.seed(),以便在迭代过程中更改种子并尝试对其进行操作,以使第1次和第11/21次迭代的种子相同。但这似乎不起作用,因为random.seed()似乎只能起作用一次。

任何这样做的方法还是没有道理?

编辑:这是我尝试使用random.seed()做到的方式:

i = 0
while i < 30:
    if i < 10:
        sd = 100+i
    elif (i >= 10) and (i < 20):
        sd = 100+i-10
    elif i >= 20:
        sd = 100+i-20

    random.seed(sd)

4 个答案:

答案 0 :(得分:3)

您使用随机种子的想法是正确的;您可以这样实现:

每10次迭代,重置种子,并且伪随机数序列从头开始重新启动。

import random


SEED = 1234


for idx in range(30):

    if idx % 10 == 0:
        random.seed(SEED)
        print()
    print(random.randrange(90, 110), end= ' ')

输出:

94 103 99 106 106 95 95 106 110 108 
94 103 99 106 106 95 95 106 110 108 
94 103 99 106 106 95 95 106 110 108 

答案 1 :(得分:0)

首先使用所需的重复次数生成30个种子,然后在生成随机数之前设置种子。

import random

seeds = np.arange(10)
seeds = np.hstack((seeds,seeds,seeds))

for i in range(30):

    random.seed(seeds[i])
    if i%10 ==0:
        print()
    print(random.randint(90, 110),end=' ')

输出:

102 94 91 97 97 109 108 100 97 104 
102 94 91 97 97 109 108 100 97 104 
102 94 91 97 97 109 108 100 97 104 

答案 2 :(得分:0)

如果没有random.seed,则可以使用列表理解和join来实现。

查找前10个随机数,然后将其复制为30个计数。

import random

randoms = []

for _ in range(10):
    randoms.append(random.randint(90, 110))

print('\n'.join([' '.join(map(str, randoms)) for _ in range(3)]))

# 110 108 93 104 98 101 95 99 104 94
# 110 108 93 104 98 101 95 99 104 94                             
# 110 108 93 104 98 101 95 99 104 94

答案 3 :(得分:0)

这是一个有效的代码。我使用数组来存储前10个随机条目,并每次使用i%10来获取适当的值

import random
random_arr=[] # 10 random numbers will be stored here
for i in range(10):
    random_arr.append(random.randint(10,90))

i = 0
while(i < 30):
    random_value = random_arr[i%10]
    print(random_value,end=" ")
    i+=1

输出:

32 27 28 86 11 54 26 24 38 16 32 27 28 86 11 54 26 24 38 16 32 27 28 86 11 54 26 24 38 16