2013-02-12 55 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