np.histogram
的輸出實際上有10個分箱;最後一個(最右邊)容器包含最大元素,因爲其右邊緣是包含的(與其他容器不同)。
np.digitize
方法不會產生這樣的異常(因爲它的用途不同),所以列表的最大元素被放入一個額外的bin。要獲得與histogram
一致的箱分配,只需使用fmin
將輸出digitize
與箱數相加即可。
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])
np.histogram的輸出實際上具有10個二進制位;計數是'[10,9,9,9,10,10,9,9,10]'。也就是說,「直方圖」方法將最後一個箱的右邊界視爲包含在內。數字化不是;所以它與'histogram'準備的bin邊緣不太兼容。 – FTP
謝謝zaq - 有沒有辦法獲得元素屬於哪個bin?雖然排序列表很容易,但是如果我有一個未排序的列表,這個問題就變得很具挑戰性。 –