在Python中为概率密度函数生成随机数

问题描述 投票:0回答:2

我目前正在研究一个与布朗运动相关的项目,并尝试使用Python模拟其中的一些(我认为这是一种非常新的语言)。目前,我的目标是在给定的概率密度函数之后生成随机数。我一直在尝试使用scipy库。

我当前的代码如下所示:

>>> import scipy.stats as st
>>> class my_pdf(st.rv_continuous):
        def _pdf(self,x,y):
            return (1/math.sqrt(4*t*D*math.pi))*(math.exp(-((x^2)/(4*D*t))))*(1/math.sqrt(4*t*D*math.pi))*(math.exp(-((y^2)/(4*D*t))))
>>> def get_brown(a,b):
        D,t = a,b
        return my_pdf()
>>> get_brown(1,1)
<__main__.my_pdf object at 0x000000A66400A320>

启动get_brown函数的所有尝试最终都给了我这些十六进制(总是从0x000000A66400A开始,只有最后三位数字改变,无论我为D和t给出什么参数)。我不确定如何解释。我想要的是在给定的PDF后面得到随机数;这些十六进制是什么意思?

python scipy probability-density
2个回答
1
投票

您看到的结果是您创建的对象的内存地址。现在您可能会问:哪个对象?你的方法get_brown(int, int)调用return my_pdf(),它创建了类my_pdf的对象并返回它。如果你想现在访问你班级的_pdf函数并计算pdf的值,你可以使用这段代码:

get_brown(1,1)._pdf(x, y)

在你刚刚创建的对象上,你也可以使用scipy.stats.rv_continous类的所有方法,你可以找到here

根据您的情况,您也可以丢弃当前代码,并使用scipy中包含的正态分布,因为布朗运动主要是正态随机过程。


0
投票

如上所述,这是一个内存位置。你的函数get_brown获取了my_pdf类的一个实例,但是没有评估该类中的方法。

您可能想要做的是在该实例上调用_pdf方法,而不是返回类本身。

def get_brown(a,b):
    D,t = a,b  #  what is D,t for?
    return my_pdf()_pdf(a,b)

我希望你发布的代码是对你真正做的事情的简化,但是函数不需要在类中 - 所以_pdf函数可以独立存在。或者,您不需要使用get_brown函数 - 只需实例化my_pdf类并调用计算方法。

© www.soinside.com 2019 - 2024. All rights reserved.