首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成和排序4种随机变量的Python错误

生成和排序4种随机变量的Python错误
EN

Stack Overflow用户
提问于 2012-11-10 03:48:43
回答 1查看 127关注 0票数 1

我试图在Python中模拟连续随机生成的数字分布,并找出合并的数字(其中y=x1+x2)在p(0.9 )之内

代码语言:javascript
复制
n = 10000
x11 = [random.random() for i in range(n)]
x12 = [random.random() for i in range(n)]
x21 = [-0.5*(log(1-random.random())) for i in range(n)]
x22 = [-0.5*(log(1-random.random())) for i in range(n)]
x31 = [random.random() for i in range(n)]
x32 = [random.uniform(0,2) for i in range(n)]
x41 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]
x42 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]

x11通过x42是一对情况,我正试图得到它们下降到0.9到1.8之间的概率,在这种情况下,生成的列表对被组合起来,然后对其进行操作。因此,将x11和x12组合起来,然后求出期望值、方差和0.9到1.8p(X)。

代码语言:javascript
复制
def test():
  x1,x2,c = 0.0,0.0,0.0
  for i in range(10000):
    if random.random()< 0.8:
      x1 += 0.25
    else:
      x2 += 1.5
    y = x1 + x2
    if y>0.9 and y<=1.8:
      c = c + 1
  return x1,x2,c

print "test: ",test()

def sim(a,b):
  #pyab1 = sum([a for a in a if a>0.9 and a<=1.8])/10000
  #pyab2 = sum([b for b in b if b>0.9 and b<=1.8])/10000
  #print "*****",float(pyab1+pyab2)
  #print a+b
  #array1 = [[a],[b]]
  array1 = a+b
  #array1.extend(a)
  #array1.extend(b)
  #c = 0
  #for y in array1:
    #if y>0.9 and y<=1.8:
      #c = c + 1
  pyab = sum([y for y in array1 if y>0.9 and y<=1.8])/10000
  print("P(a < x <= b) : {0:8.4f}".format(pyab))

我只计算概率P(0.9<%Y<=1.8),所以计数必须在这些值之内。当我尝试将其用于所有情况下,它们仍然得到了错误的值时,1-随机随机()仅适用于这种情况。这是理论上的结果,你可以看到它是如何不同的:

y~u(0,1) = 0.575 y~exp(2) = 0.3371 x1~u(0,1) x2~u(0,2) P(y=0.25)=0.8P(y=1.5)= 0.2 =0.2

这是输出,后面是它应该给出的值,但这显示了结果有多远。

代码语言:javascript
复制
case 1: P(a < x <= b) : 0.7169 #should be 0.575 
case 2: P(a < x <= b) : 0.4282 #should be 0.3371 
case 3: P(a < x <= b) : 0.5966 #should be 0.4413 
case 4: P(a < x <= b) : 0.5595 #should be 0.2 

我对Python非常陌生,所以如果我的问题似乎有一个明显的解决方案而我错过了,请耐心等待。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-10 03:54:06

很可能你最好换掉

代码语言:javascript
复制
pyab = sum([y for y in array1 if y>0.9 and y<=1.8])/10000

使用

代码语言:javascript
复制
pyab = len([y for y in array1 if y>0.9 and y<=1.8])/len(array1)

因为你需要概率,而不是实际值的总和。而且,len(array1)很可能不是10000,而是两个数组的合并长度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13319052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档