我使用以下代碼來陣列數字化成16個二進制位:numpy.digitize返回值超出範圍?
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我期望輸出是在範圍[1,16],因爲有16個二進制位。但是,返回數組中的一個值是17.這怎麼解釋?
我使用以下代碼來陣列數字化成16個二進制位:numpy.digitize返回值超出範圍?
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
我期望輸出是在範圍[1,16],因爲有16個二進制位。但是,返回數組中的一個值是17.這怎麼解釋?
這實際上是記錄的numpy.digitize()
行爲:
返回的每個指數
你的情況i
是這樣的:bins[i-1] <= x < bins[i]
如果bins
單調遞增,或bins[i-1] > x >= bins[i]
如果bins
是單調遞減的。如果x
中的值超出了bins
的 範圍,則0
或len(bins)
會根據情況返回。
所以,0
和17
也是有效的返回值(請注意,由numpy.histogram()
返回的箱陣列具有長度17
)。由numpy.histogram()
返回的箱子覆蓋範圍array.min()
至array.max()
。文檔中給出的條件顯示array.min()
屬於第一個bin,而array.max()
位於最後一個bin之外 - 這就是爲什麼0
不在輸出中,而17是。
numpy.histogram()
產生一個bin 邊緣的數組,其中有(number of bins)+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])
嗯,我知道關於數字化()的邊緣情況行爲。但是,由於我使用直方圖()來創建垃圾箱,是不是所有值都應該位於垃圾箱內? – sandesh247 2010-12-04 23:18:23