装箱
问题内容:
我有一个数组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])