scipy.stats.norm.pdf 和手动绘制高斯之间的区别
Difference between scipy.stats.norm.pdf and plotting gaussian manually
我正在使用 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
需要西格玛,但在您的计算中您将其用作方差。还缺少两个括号。
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,175,10000)
sig1, mu1 = 10.0, 30.0
y1 = stats.norm.pdf(x, mu1, 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()
输出:
我正在使用 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
需要西格玛,但在您的计算中您将其用作方差。还缺少两个括号。
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,175,10000)
sig1, mu1 = 10.0, 30.0
y1 = stats.norm.pdf(x, mu1, 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()
输出: