将N个点放入M个相等的箱中

时间:2017-08-14 16:50:59

标签: python arrays algorithm numpy partitioning

我有一个N(正)点的数组。我想找到直方图的M bin边,使得所有条都具有相同的高度。换句话说,我想找到M + 1个点,使得两个连续的bin边缘之间的数组点的计数是相同的。

示例

>>> array = [0.3 0.3 0.3 0.7 0.8 0.9]
>>> M = 2
>>> binPartition(array, M)
[0, 0.5, 1]

我很感激python和numpy中的答案,但是已知算法的链接就足够了!谢谢! :)

1 个答案:

答案 0 :(得分:1)

可以使用percentile完成:

import numpy as np

def binPartition(array, M):
    return np.percentile(array, np.linspace(0, 100, M + 1))

binPartition([0.3, 0.3, 0.3, 0.7, 0.8, 0.9], 2)
>>> array([ 0.3,  0.5,  0.9])