我在下面的代码中打印了特定均值和标准差的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
答案 0 :(得分:3)
除非你有理由自己实施。 scipy.stats.norm
中提供了所有这些功能我认为您要求 cdf ,然后使用此代码:
from scipy.stats import norm
print(norm.cdf(x, mean, std))
答案 1 :(得分:3)
如果您想从头开始编写它:
class PDF():
def __init__(self,mu=0, sigma=1):
self.mean = mu
self.stdev = sigma
self.data = []
def calculate_mean(self):
self.mean = sum(self.data) // len(self.data)
return self.mean
def calculate_stdev(self,sample=True):
if sample:
n = len(self.data)-1
else:
n = len(self.data)
mean = self.mean
sigma = 0
for el in self.data:
sigma += (el - mean)**2
sigma = math.sqrt(sigma / n)
self.stdev = sigma
return self.stdev
def pdf(self, x):
return (1.0 / (self.stdev * math.sqrt(2*math.pi))) * math.exp(-0.5*((x - self.mean) / self.stdev) ** 2)
答案 2 :(得分:2)