根据scipy中的逻辑变量或resample变量返回数组中的随机变量

时间:2013-02-12 18:19:00

标签: arrays random scipy mc

我已经尝试过搜索其中一个答案了,找不到我要找的东西。我确定它是相当基本的,我要么不知道如何用短语搜索我正在寻找的东西,我会以错误的方式进行。

使用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

1 个答案:

答案 0 :(得分: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