如何解决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)
结果是:
有人可以向我解释为什么它们不一样吗?
解决方法
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()
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。