如何在为连续数据(Python)创建直方图后获取概率列表?

How to get a list of probabilities after creating a histogram for continuous data (Python)?

我有下面的数据集 (Data),我使用下面的代码创建了一个直方图来提取 n(每个 bin 或频率中的点数)。然后我通过将频率除以总点数来计算每个箱子的概率以获得每个箱子的相应概率(bin_probability)。

现在我想获得列表中每个点的概率。例如,假设点 1 在 bin 1 中,因此概率是 0.65 数组中的第一个值;点 2 在 bin 5 中,所以概率是 0.05,等等。 如何将每个点映射到其各自的 bin_probability 以便我有每个点的概率列表(在本例中为 20 个概率) ?

Data = [4.33, 4.11, 6.33, 5.67, 3.24, 6.74, 24.6, 6.43, 4.122, 9.67, 9.99, 3.44, 5.66, 3.54, 5.34, 6.55, 5.78, 3.56, 1.55, 5.45]

n, bin_edges = np.histogram(Data, bins = 10)
totalcount = np.sum(n)
bin_probability = n / totalcount
print(bin_probability)
>> array([0.65, 0.3 , 0.  , 0.  , 0.05])

非常感谢您的帮助!

基于上面@kcsquared 的link,可以制作一个列表,其中包含每个点的相应 bin 位置。变量“bins_per_point”在一个数组中包含 20 个元素。每个元素对应于数据点所属的 bin。接下来 'probability_perpoint 变量将每个频率除以总计数以获得相应的概率。

bins_per_point = np.fmin(np.digitize(Data, bin_edges), len(bin_edges)-1)
probability_perpoint = [bin_probability[bins_per_point[i]-1] for i in range(len(Data))] 
>> array([0.1 , 0.1 , 0.15, 0.1 , 0.05, 0.15, 0.55, 0.15, 0.1 , 0.2 , 0.2 ,
       0.05, 0.1 , 0.05, 0.1 , 0.15, 0.1 , 0.05, 0.05, 0.1 ])

为了验证,唯一概率之和为1。

 np.sum(bin_probability) 
>> 1