我目前正在开展一个与布朗运动相关的项目,并尝试使用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后面得到随机数;这些十六进制是什么意思?
答案 0 :(得分: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
中包含的正态分布,因为布朗运动主要是正常随机过程。
答案 1 :(得分: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
类并调用计算方法。