我有以下代码来生成一些随机数:
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
所以,我想要做的是我想要一些lambdaj
和tauj
的列表,但是,我不希望相关 lambdaj[i]*tau[j] >= 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)
),您的约束将保证和您的数据将随机进行每次脚本调用。