我有以下[0.1,0.2,1,5,100]等数据......我想要做的是计算之间的项目数
1-10
11-20
21-30
... and so on...
Run Code Online (Sandbox Code Playgroud)
现在,我有一个非常凌乱的代码..
我所做的就是映射
1-10 :=> 0
11-20:=> 1
..and on..
Run Code Online (Sandbox Code Playgroud)
所以我定义了桶0,其中桶0的范围是1-10,桶1的范围是11-20,依此类推.
代码是:
for ele in data:
bucket_id = get_bucket_id(ele)
freq_dict[bucket_id] +=1
Run Code Online (Sandbox Code Playgroud)
get_bucket_id是一个很大的if else代码..
有一个更好的方法吗?
使用a Counter并使用整数除法计算存储桶.
from collections import Counter
freq = Counter()
for x in data:
freq[(x - 1) // 10] += 1
Run Code Online (Sandbox Code Playgroud)
请注意,这会将小于1的值映射到-1.在处理非严格正数据时,您实际上想要使用范围1-9,10-19等.
您可以使用numpy.histogram,它将数据中的元素出现在一组间隔(箱)中的频率制成表格。它返回每个 bin 和每个 bin 最右边的计数:
>>> import numpy as np
>>> data = [0.1,0.2,1,5,100]
>>> hist, bin_edges = np.histogram( data )
>>> hist
array([4, 0, 0, 0, 0, 0, 0, 0, 0, 1])
>>> bin_edges
array([ 0.1 , 10.09, 20.08, 30.07, 40.06, 50.05, 60.04,
70.03, 80.02, 90.01, 100. ])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |