我有两个列表 value 和 freq 中的数据,如下所示:
value freq 1 2 2 1 3 3 6 2 7 3 8 3 ....
我希望输出为
bin freq 1-3 6 4-6 2 7-9 6 ...
我可以编写几行代码来执行此操作。但是,我在查看标准python或Numpy中是否有构建函数?当你在数组/列表中给出重复数据时,我找到了解决方案,即它们还没有被分组到频率表中(例如 d= [1,1,2,3,3,3,6,6,7,7,7,8,8,8,...]
。但是,在这种情况下我找不到答案。我不想首先将我的数据转换为单个扩展列表,如d
,然后使用直方图函数。
答案 0 :(得分:9)
import numpy as np
values = [1,2,3,6,7,8]
freqs = [2,1,3,2,3,3]
hist, _ = np.histogram(values, bins=[1, 4, 7, 10], weights=freqs)
print hist
输出:
[6 2 6]
答案 1 :(得分:0)
你可以试试这个:
import collections
d=[1,1,2,3,3,3,6,6,7,7,7,8,8,8]
collections.Counter([i-i%3+3 for i in d])
它会生成一个包含你想要的词典。
答案 2 :(得分:0)
当你在数组/列表中给出重复数据
时,我找到了解决方案
您没有说明解决方案是什么,但如果它支持使用迭代器,您可以生成它,而不是创建整个列表:
导入itertools
values = [1,2,3,6]
freqs = [2,1,3,2]
v_iter = itertools.chain(*[ itertools.repeat(v,f) for v, f in zip(values, freqs) ])
#for x in v_iter:
# print x
your_solution(v_iter)