gpt4 book ai didi

Python 对数正态密度与解析解不同

转载 作者:行者123 更新时间:2023-12-01 03:05:17 24 4
gpt4 key购买 nike

我一直在 python 中测试一些函数(以确保我很好地理解函数),但我很困惑,因为我有不同的结果。

我正在测试stats.lognorm.pdf表单scipy。此函数应返回与以下代码中的 x,shape,scale, loc = 0 相同的结果:

val1 = (1/(x*shape*math.sqrt(2*math.pi)))*math.exp(-((math.log(x)-math.log(scale)**2)/(2*math.pow(shape,2))))
val2 = stats.lognorm.pdf(x, shape, 0, scale) #I expect that val1 == val2

当我尝试使用一些精细的数字时,它看起来不错。

x = 1

scale = 1 #log(shape) = u => u=0
shape = 0.25

然后

val1 = 1.5957691216057308

val2 = 1.59576912161

但是当我设置

shape = 0.8
scale = 25.16
x = 23

结果相差很大

val1 = 6.33367993244142
val2 = 0.0215455972263

为什么会发生这种情况?我的代码有问题吗?

最佳答案

您的 val1 是错误的,您的 **2 位于括号内的指数中,而不是括号外。如果你尝试这样做:

val1 = (1 / (x * shape * math.sqrt(2 * math.pi))) * math.exp(
-(math.log(x) - math.log(scale))**2 / (2 * math.pow(shape, 2)))

一切都应该按预期进行。

这里可能是一个值得学习的教训,为什么 PEP8 坚持正确地格式化和间隔代码,因为它使发现这样的错误变得更容易。

关于Python 对数正态密度与解析解不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43496729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com