【问题标题】:Binning frequency distribution in PythonPython中的分箱频率分布
【发布时间】:2013-03-19 19:21:33
【问题描述】:

我在 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)并使用直方图函数。

【问题讨论】:

    标签: python numpy histogram


    【解决方案1】:

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

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

    导入迭代工具

    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)
    

    【讨论】:

      【解决方案2】:
      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]
      

      【讨论】:

        【解决方案3】:

        你可以试试这个:

        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])
        

        它会根据你的需要生成一个字典。

        【讨论】:

        • 我的数据是按您采取的方式提供的。但是作为两个不同的值和频率列表。如果它作为 d.. np.histogram 有效
        猜你喜欢
        • 2015-11-09
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 2019-06-27
        • 2016-01-04
        • 2011-02-05
        • 2014-07-08
        相关资源
        最近更新 更多