生成具有约束
问题描述:
随机数的相关名单,我有以下的代码生成一些随机数字:但是生成具有约束
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
。所以,我认为,我需要增加我的种子,让它找到一些满足我的要求的种子价值。但是,我无法想出一个能够做到的循环工作。任何建议表示赞赏。
答
您的问题意味着任何拉姆达乘以任何头必须小于1(i * j
),但您的测试意味着,实际上你只关心有关lambda表达式和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)
),您的约束被保证为和您的数据对于每个脚本调用都是随机的。
这是一个措辞错误,只是编辑它。 – user8028576
我相信答案仍然是目标。 – hunteke
第二个替代工作正常。然而,即使我尝试了不同的方式,第一个也没有工作。不过,非常感谢你;你绝对解决了我的问题。 – user8028576