在Python中为概率密度函数生成随机数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中为概率密度函数生成随机数相关的知识,希望对你有一定的参考价值。
我目前正在研究一个与布朗运动相关的项目,并尝试使用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后面得到随机数;这些十六进制是什么意思?
您看到的结果是您创建的对象的内存地址。现在您可能会问:哪个对象?你的方法get_brown(int, int)
调用return my_pdf()
,它创建了类my_pdf
的对象并返回它。如果你想现在访问你班级的_pdf
函数并计算pdf
的值,你可以使用这段代码:
get_brown(1,1)._pdf(x, y)
在你刚刚创建的对象上,你也可以使用scipy.stats.rv_continous
类的所有方法,你可以找到here。
根据您的情况,您也可以丢弃当前代码,并使用scipy
中包含的正态分布,因为布朗运动主要是正态随机过程。
如上所述,这是一个内存位置。你的函数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
类并调用计算方法。
以上是关于在Python中为概率密度函数生成随机数的主要内容,如果未能解决你的问题,请参考以下文章