微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scipy.stats.norm.pdf 和手动绘制高斯之间的区别

如何解决scipy.stats.norm.pdf 和手动绘制高斯之间的区别

我正在使用 scipy.stats 绘制一个简单的正态分布,但是由于某种原因,当我尝试将其与常规高斯公式进行比较时,该图看起来非常不同:

import numpy as np
import scipy.stats as stats

x = np.linspace(-50,175,10000)
sig1,mu1  = 10.0,30.0

y1 = stats.norm.pdf(x,mu1,sig1)
y11 = np.exp(-(x-mu1)**2/2*sig1)/(np.sqrt(2*np.pi*sig1))

plt.plot(x,y11)
plt.plot(x,y1)

结果是:

enter image description here

有人可以向我解释为什么它们不一样吗?

解决方法

stats.norm.pdf 需要 sigma,但在您的计算中,您将其用作方差。还有两个括号不见了。

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

x = np.linspace(-50,175,10000)
sig1,mu1 = 10.0,30.0
var1 = sig1 ** 2

y1 = stats.norm.pdf(x,mu1,sig1)
y11 = np.exp(-((x - mu1) ** 2) / (2 * var1)) / (np.sqrt(2 * np.pi * var1))

plt.plot(x,y11)
plt.plot(x,y1)
plt.show()

产生相同的情节。

干杯!

,

首先,你有一个错误。手动高斯指数的分母缺少括号。

此外,scipy.norm.pdf 的第三个参数是标准差 (sigma),但它出现在高斯 PDF 的平方 (sigma^2) 中。

更正后的代码是

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

x = np.linspace(-50,mu1  = 10.0,30.0

y1 = stats.norm.pdf(x,sig1)
y11 = np.exp(-(x-mu1)**2/(2*sig1**2))/(np.sqrt(2*np.pi*sig1**2))


plt.plot(x,y1,label="scipy",alpha=0.85)
plt.plot(x,y11,ls="--",label="custom")
plt.legend()
plt.grid()

输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。