2010-12-04 104 views
2

我使用以下代碼來陣列數字化成16個二進制位:numpy.digitize返回值超出範圍?

numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1]) 

我期望輸出是在範圍[1,16],因爲有16個二進制位。但是,返回數組中的一個值是17.這怎麼解釋?

回答

5

這實際上是記錄的numpy.digitize()行爲:

返回的每個指數i是這樣的:bins[i-1] <= x < bins[i]如果 bins單調遞增,或bins[i-1] > x >= bins[i]如果 bins是單調遞減的。如果x中的值超出了bins的 範圍,則0len(bins)會根據情況返回。

你的情況

所以,017也是有效的返回值(請注意,由numpy.histogram()返回的箱陣列具有長度17)。由numpy.histogram()返回的箱子覆蓋範圍array.min()array.max()。文檔中給出的條件顯示array.min()屬於第一個bin,而array.max()位於最後一個bin之外 - 這就是爲什麼0不在輸出中,而17是。

+0

嗯,我知道關於數字化()的邊緣情況行爲。但是,由於我使用直方圖()來創建垃圾箱,是不是所有值都應該位於垃圾箱內? – sandesh247 2010-12-04 23:18:23

2

numpy.histogram()產生一個bin 邊緣的數組,其中有(number of bins)+1

1

在numpy版本1.8中,您可以選擇是否讓numpy.digitize考慮關閉或打開的時間間隔。 以下是一個例子(從http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html複製)

X = np.array([1.2,10.0,12.4,15.5,20])

倉= np.array([0,5,10, 15,20])

np.digitize(X,頻段右=真

陣列([1,2,3,4,4])