生成具有约束的随机数的相关列表

时间:2017-10-18 03:26:41

标签: python-2.7 random

我有以下代码来生成一些随机数:

import random
random.seed(1)

lambdaj = []
tauj = []

for i in range(30):
    lambdaj.append(random.randint(2, 15))
    tauj.append(random.uniform(10/365, 40/365))

#What I want is:

for i in range(len(tauj)):
    if lambdaj[i]*tauj[i] >= 1:
        #RECALCULATE lambdaj and tauj by increasing the random.seed by 1

所以,我想要做的是我想要一些lambdajtauj的列表,但是,我不希望相关 lambdaj[i]*tau[j] >= 1。它们应该都是< 1。所以,我认为,我需要增加种子,让它找到满足我要求的种子价值。但是,我无法想出一个能够完成它的循环工作。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

你的问题暗示任何 lambda乘以任何 tau必须小于1(i * j),但你的测试暗示实际上你只关心相关的lambdas和taus(i * i):

lambdaj[i] * tauj[j]   (In words)
lambdaj[i] * tauj[i]   (Your code test)

假设您的代码符合您的意思,那么就没有必要找到一个好的种子:只需重新生成“坏”索引:

for i in range(len(tauj)):
    while lambdaj[i] * tauj[i] >= 1:
        lambdaj[i] = random.randint(2, 15)
        tauj[i] = random.uniform(10/365, 40/365)

或者,只需在生成数据时执行此操作:

for i in range(30):
    l = j = 5   # something larger than 1
    while l * j >= 1:
        l = random.randint(2, 15)
        j = random.uniform(10/365, 40/365)
    lambdaj.append( l )
    tauj.append( j )

事实上,如果您正在寻找实际的随机数据,那么就不要设置种子。使用此方法,并且不设置种子(例如.seed(1)),您的约束将保证您的数据将随机进行每次脚本调用。