我有一个包含超过1000个值的列表的数据,例如:
[3.481, 2.413, 4.682,…]
,可以很容易地绘制它的直方图。但是,我希望将这些值的相对频率(或每个值出现的概率)保存为一个列表,并确保频率之和为1。我试着用
进口numpynumpy。直方图(数据、密度= 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作为结果。