Python中的装箱频率分布

Python中的装箱频率分布,python,numpy,histogram,Python,Numpy,Histogram,我在两个列表值和频率中有如下数据: 值频率 1 2 2 1 3 3 6 2 7 3 8 3 .... 我希望输出是 bin freq 1-3 6 4-6 2 7-9 6 ... bin freq 1-3 6 4-6 2 7-9 6 ... 我可以写几行代码来实现这一点。然而,我在看标准python或Numpy中是否有内置函数?当你在数组/列表中重复给定数据时,我找到了解决方案,即它们尚未分组到频率表中(例如,

我在两个列表值和频率中有如下数据:

值频率 1 2 2 1 3 3 6 2 7 3 8 3 ....

我希望输出是

bin freq 1-3 6 4-6 2 7-9 6 ... bin freq 1-3 6 4-6 2 7-9 6 ... 我可以写几行代码来实现这一点。然而,我在看标准python或Numpy中是否有内置函数?当你在数组/列表中重复给定数据时,我找到了解决方案,即它们尚未分组到频率表中(例如,
d=[1,1,2,3,3,6,6,7,7,8,8,…]
。但是,在这种情况下,我找不到答案。我不想先将我的数据转换为像
d
这样的单个扩展列表,然后使用直方图功能。

您可以尝试以下方法:

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])
它将生成一个包含您所需内容的词典

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]
当你在数组/列表中重复给定数据时,我找到了解决方案

您没有说明解决方案是什么,但是如果它支持使用迭代器,您可以生成它,而不是创建整个列表:

进口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)

我的数据是按照你取d.的方式提供的,但作为两个不同的值和频率列表。如果它是以d.np.的形式给出的,直方图是有效的
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)