2017-10-18 58 views
1

隨機數的相關名單,我有以下的代碼生成一些隨機數字:但是生成具有約束

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

您的問題意味着任何拉姆達乘以任何頭必須小於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)),您的約束被保證爲您的數據對於每個腳本調用都是隨機的。

+0

這是一個措辭錯誤,只是編輯它。 – user8028576

+0

我相信答案仍然是目標。 – hunteke

+0

第二個替代工作正常。然而,即使我嘗試了不同的方式,第一個也沒有工作。不過,非常感謝你;你絕對解決了我的問題。 – user8028576