【问题标题】:spyder plotting with dots for a pdfspyder用点绘制pdf
【发布时间】:2016-08-14 13:01:03
【问题描述】:

我正在尝试用点进行绘图,希望最终我可以得到概率密度函数模拟。我的代码是:

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

问题是我无法编写使 y+=1 的 for 循环,而该位置 (clock_offset,y) 已被一个点占据。有什么解决办法吗?

【问题讨论】:

  • 你实际上打算做什么? for 'bo' in (clock_offset,y): y+=1 毫无意义。字符串'bo' 与它有什么关系?

标签: python function matplotlib plot spyder


【解决方案1】:

我不确定你的这段代码应该做什么。但是请看一下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。

这就是你所追求的吗?

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 2020-07-08
    • 2012-04-21
    • 2016-11-16
    • 2016-09-28
    • 2021-06-24
    • 2021-07-26
    • 2014-07-23
    相关资源
    最近更新 更多