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

Put N points into M equal bins

我有一个包含 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 中得到答案,但是 link 已知算法就足够了!谢谢! :)

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