Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从pdf生成概率?_Python_Numpy_Scipy_Probability Density - Fatal编程技术网

Python 从pdf生成概率?

Python 从pdf生成概率?,python,numpy,scipy,probability-density,Python,Numpy,Scipy,Probability Density,我有一些数据是正态分布的,我已经安装了pdf。然而,我想从数据集中得到给定值发生的可能性。据我所知,这是pdf下的垃圾箱区域,x的值位于该区域。是否有一个numpy或scipy.stats函数来生成这个?我已经看过了,但不是我没有看到,就是我的理解力不足让我退缩了。到目前为止,我已经: import h5py import numpy as np from matplotlib import pyplot as plt import matplotlib.mlab as mlab import

我有一些数据是正态分布的,我已经安装了pdf。然而,我想从数据集中得到给定值发生的可能性。据我所知,这是pdf下的垃圾箱区域,x的值位于该区域。是否有一个numpy或scipy.stats函数来生成这个?我已经看过了,但不是我没有看到,就是我的理解力不足让我退缩了。到目前为止,我已经:

import h5py
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.mlab as mlab
import scipy.stats as stats
import numpy
import math


a = 'data.h5'
f = h5py.File(a,'r')
dset = f['/DATA/DATA/']
values = dset[...,0]
然后,我可以生成此数据的柱状图,并将pdf与之匹配:

n, bins, patches = plt.hist(values, 50, normed=1)
mu = np.mean(values)
sigma = np.std(values)

plt.plot(bins, mlab.normpdf(bins, mu, sigma))

plt.show()
我可以得到给定值x的f(x)(在这个例子中是0.65)

有人能帮我从中得出概率吗

我已经附上了pdf输出的直方图


理想情况下,你需要做的是在你想要概率的事件范围内,对概率密度函数进行积分。下面是一些代码:

import numpy as np
import scipy.stats as ss

a = ss.norm.rvs(4, 2, 40)
hist(a, normed=True)

xs = np.linspace(0, 10, 30)
plot(xs, ss.norm.pdf(xs, 4, 2), label='pdf')
plot(xs, ss.norm.cdf(xs, 4, 2), label='cdf')
这将产生一个正态分布,中心值为4,西格玛值为2。下图用红线表示pdf,用紫线表示cdf。cdf只是pdf从负无穷大到计算值的积分。因此,要获得某个范围内pdf的积分,只需减去该范围两个端点处的cdf值

现在你可以问看到-100到4之间的值的概率是多少

print  ss.norm.cdf(4, 4, 2) - ss.norm.cdf(-100, 4, 2)
这将导致预期答案
0.5
,相当于(几乎)整个分布的一半。因此,在您的情况下,您可能对看到0.60到0.70之间的值的概率感兴趣:

print  ss.norm.cdf(0.70, 4, 2) - ss.norm.cdf(0.60, 4, 2)
这将导致以下可能性很小:

0.00490600527511
我应该注意到,0.65的“概率”本身是没有意义的,因为你有一个连续的概率分布,而0.65的精确值是它的无穷小的一部分,所以它的概率是0

0.00490600527511