我有下面的代码,它打印了一个特定的平均值和标准差的PDF图。
现在我需要找到一个特定值的实际概率。例如,如果我的均值是0,我的值是0,我的概率是1。这通常通过计算曲线下的面积来完成。与此类似:
http://homepage.divms.uiowa.edu/~mbognar/applets/normal.html
我不知道如何处理这个问题
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def normal(power, mean, std, val):
a = 1/(np.sqrt(2*np.pi)*std)
diff = np.abs(np.power(val-mean, power))
b = np.exp(-(diff)/(2*std*std))
return a*b
pdf_array = []
array = np.arange(-2,2,0.1)
print array
for i in array:
print i
pdf = normal(2, 0, 0.1, i)
print pdf
pdf_array.append(pdf)
plt.plot(array, pdf_array)
plt.ylabel('some numbers')
plt.axis([-2, 2, 0, 5])
plt.show()
print
3条答案
按热度按时间eqqqjvef1#
除非你有自己的理由。所有这些功能在scipy.stats.norm中都可用
我想你要求的是cdf,那么就用这个代码:
muk1a3rh2#
如果你想从头开始写:
ylamdve63#
从
x = a
到x = b
的曲线y = f(x)
下的面积与从x = a
到x = b
的f(x)dx
的积分相同。Scipy有一个快速简单的方法来做积分。正如你所理解的,在该区域找到一个点的概率不可能是1,因为这个想法是曲线下的总面积是1(除非它可能是一个δ函数)。所以你应该得到0 ≤ probability of value < 1
的任何特定值的兴趣。可能有不同的方法,但传统的方法是沿x轴沿着like this分配置信区间。在继续编码之前,我会阅读高斯曲线和归一化。