装箱


问题内容

我有一个数组A,我试图放入10个垃圾箱中。这是我所做的。

A = range(1,94)
hist = np.histogram(A, bins=10)
np.digitize(A, hist[1])

但是输出有11个容器,而不是10个,最后一个值(93)放置在容器11中,而应该放在容器10中。我可以用hack修复它,但是最优雅的方法是什么?如何分辨hist
[1]中的最后一个bin在右边包含数字-[]而不是[]?


问题答案:

的输出np.histogram实际上有10个bin;最后一个(最右边的)箱包含最大元素,因为它的右边缘是包容性的(与其他箱不同)。

np.digitize方法不会产生此类异常(因为其用途有所不同),因此列表中最大的元素将放入一个额外的容器中。要获得与一致的仓位分配histogram,只需使用来将输出digitize限制为仓位数量fmin

A = range(1,94)
bin_count = 10
hist = np.histogram(A, bins=bin_count)
np.fmin(np.digitize(A, hist[1]), bin_count)

输出:

array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,
        2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,
        4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,
        6,  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,
        8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
       10, 10, 10, 10, 10, 10, 10, 10])