2016-04-21 81 views
0

我想繪製點希望最終我可以得到一個概率密度函數模擬。我的代碼是:spyder繪製點的pdf

import random 
import math 
from numpy import * 
from matplotlib.pyplot import * 
import matplotlib.pyplot as pl 


clock_offset=3000 

y=0 

p=0.50 

for i in range (40): 

    x = random.random() 
    if x < p: 
     clock_offset+=1 

     for 'bo' in (clock_offset,y): 
      y+=1 
     pl.plot(clock_offset,y,'bo') 
     pl.axis([2980, 3040, 0, 40]) 
     y=0 
    else: 
     clock_offset-=1 

     for 'bo' in (clock_offset,y): 
      y+=1 
     pl.plot(clock_offset,y,'bo') 
     pl.axis([2980, 3040, 0, 40]) 
     y=0 

問題是我不能寫一個for循環,使得Y + = 1,當那個地方(clock_offset,Y)已經佔據了點。任何解決方案

+0

你打算幹什麼?對於'clock_offset,y'中的'bo':y + = 1'沒有任何意義。與它有關的字符串是什麼? – Roberto

回答

0

我不確定你的代碼應該做什麼。但看看this answer of mine,這解釋瞭如何獲得一個分佈上的隨機數。貝婁我給你重寫了那個C++代碼到python中。

import random 
import math 
import numpy as np 
import matplotlib.pyplot as plt 


def GausPDF(x, a=1., b=2., c=3.): 
    return a*math.exp( -((x-b)*(x-b)/(2*c*c) )) 

def random_on_PDF(PDF, top, bottom, maxPDF): 
    x = (top-bottom)*np.random.random()+bottom 
    y = maxPDF*random.random() 

    while(y>PDF(x)): 
     x = (top-bottom)*np.random.random()+bottom 
     y = maxPDF*random.random() 

    return x,y 


x, y, = list(), list() 
for i in range(0, 1000): 
    a,b = random_on_PDF(GausPDF, 10., -5., 1.) 
    x.append(a) 
    y.append(b) 

plt.scatter(x,y) 
plt.show() 

直接使用此代碼和THIS matplotlib例如,您可以模擬投票如何隨機影響/生成一個PDF。

這就是你所追求的?