7

我在两个列表valuefreq中有数据,如下所示:

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

我希望输出是

分频
1-3 6
4-6 2
7-9 6
...

我可以写几行代码来做到这一点。但是,我正在寻找标准 python 或 Numpy 中是否有 builitin 函数?当您在数组/列表中重复给出数据时,我找到了解决方案,即它们尚未分组到频率表中(例如 d= [1,1,2,3,3,3,6,6,7,7,7,8,8,8,...]。但是,在这种情况下我找不到答案。我不想将我的数据转换为单个像第一个一样扩展列表d并使用直方图函数。

4

3 回答 3

15
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]
于 2013-03-29T05:37:49.157 回答
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])

它会生成一个你想要的字典。

于 2013-03-29T05:17:45.667 回答
0

当您在数组/列表中重复给出数据时,我找到了解决方案

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

导入迭代工具

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)
于 2013-03-29T05:38:26.307 回答