2013-02-12 32 views
2

我試着搜索這些答案中的一個很多,並且找不到我在找什麼。我相信這是相當基本的,我要麼不知道如何對搜索我所尋找的詞彙進行搜索,而是以錯誤的方式進行搜索。返回數組內的隨機變量,取決於邏輯變量或scipy中的重採樣變量

使用SciPy的,我想無論是:

通過隨機分佈定義一個變量,並把它每次被調用時返回一個新的值,例如:

x = np.random.normal(30,30/10) 
x = #random number 
x = #new random number 

最終目標是得到這一點代碼(以及更多的類似代碼),以返回隨機變量,以得到g1和g2的數字,這些數字由數組gamma中的每個位置的分佈定義。我很樂意在g1rand和g2rand中查找隨機值,如果這樣做可行的話,但我還沒有弄清楚如何用一個循環來填充gamma數組。最終的目標是運行代碼的MC模擬。提前致謝。

disc = 11j #number of intervals 
depth = 50 
q = 300 #number of random sampls 
n = depth 
interval_thickness =abs(n/(abs(disc)-1)) 
depth_array = np.r_[0:n:(disc)] 
ld1 = 10.0 
ld2 = 70.0 
g1 = 120 
g1rand = np.random.normal(g1,g1/10,q) 
g2 = 60 
g2rand = np.random.normal(g2,g2/10,q) 
condlist = [depth_array <= 0,depth_array<=ld1, depth_array<=ld2] 
choicelist = [0, g1, g2] 
gamma = np.select(condlist, choicelist) 
interval_weight=interval_thickness*gamma 

回答

0

我不認爲我完全理解你正在嘗試在較長的一段代碼做的,但如果你想生成您的隨機樣本一個接一個,你可以使用scipy.stats.norm

>>> import scipy.stats 
>>> x = scipy.stats.norm(loc=30, scale=30/10) # loc is mean, scale is stdev 
>>> x.rvs() # return a single random sample from distribution 
30.0640285320252 
>>> x.rvs() 
29.773804986818252 
>>> x.rvs(5) # returns an array of 5 random samples from distribution 
array([ 31.46684871, 28.5463796 , 30.37591994, 30.50111085, 32.19189648]) 
>>> x.mean() # recover distribution parameters from x 
30.0 
>>> x.std() 
3.0 
+0

Gahhh。謝謝!我認爲這樣做。我知道必須有這樣的事情,我找不到它。 – user2060108 2013-02-12 23:42:39

+0

想到我編輯了我的評論。我最終要做的就是讓上面的gamma數組返回變量,就好像每次g1都是作爲新的g1rand.rvs()運行的結果一樣。相同的g2 - > g2rand.rvs。 這是更好地通過循環完成? – user2060108 2013-02-13 00:31:12