如何将数据集的相对频率保存为列表?



我有一个包含超过1000个值的列表的数据,例如:

[3.481, 2.413, 4.682,…]

,可以很容易地绘制它的直方图。但是,我希望将这些值的相对频率(或每个值出现的概率)保存为一个列表,并确保频率之和为1。我试着用

进口numpy

numpy。直方图(数据、密度= None)

但是它没有给我我想要的,因为总和不等于1。将密度设置为True将标准化,使得范围内的积分为1,但我希望等于1。任何帮助都将非常感激,我试着到处寻找一个简单的代码。

应该可以了。

def rel_freq(x):
freqs = [(x.count(value) / len(x)) for value in set(x)]
return freqs

但是,请注意,总和不会正好是1,而是0.9999之类的东西,这是由于浮点错误。

np.histogram(x)函数已经根据箱子给出了x中出现的次数。从那里你只要除以x.size得到频率:

In [1]: import numpy as np
In [2]: x = np.random.random(1000)
In [3]: counts, bin_edges = np.histogram(x, bins=np.linspace(0.0, 1.0, 10))
In [4]: counts
Out[4]: array([101, 111, 119, 110, 119, 106, 120, 106, 108], dtype=int64)
In [5]: counts / x.size
Out[5]: array([0.101, 0.111, 0.119, 0.11 , 0.119, 0.106, 0.12 , 0.106, 0.108])
In [6]: np.sum(counts) / x.size
Out[6]: 1.0

注意,正如@prnvbn指出的那样,浮点运算是不精确的,您可能并不总是得到精确的1.0作为结果。

最新更新