簡體   English   中英

不包括 numpy.histogram 中的最右邊

[英]Excluding rightmost edge in numpy.histogram

我有一個數字列表a和一個 bin 列表,我將使用numpy.histograma中的數字進行分類。 這些 bin 是根據 a 的平均值標准差( std ) 計算得出a 所以 bin 的數量是B ,第一個 bin 的最小值是mean - std ,最后一個 bin 的最大值是mean + std 粗體字表示我的最終目標)

一個例子如下:

>>> a
array([1, 1, 3, 2, 2, 6])

>>> bins = np.linspace(mean - std, mean + std, B + 1)
array([ 0.79217487,  1.93072496,  3.06927504,  4.20782513]))

>>> numpy.histogram(a, bins = bins)[0]
(array([2, 3, 0], dtype=int32)

但是,我想排除最后一個 bin 的最右邊 - 即,如果 a 中a值完全等於mean + std ,我不希望將它包含在最后一個 bin 中。 關於meanstd差的漫畫並不重要,不包括最右邊的邊緣(也就是使其成為半開區間)。 不幸的是, 醫生在這方面說:

除了最后一個(最右邊的)垃圾箱外,所有垃圾箱都是半開的。 換句話說,如果 bins 是:

[1, 2, 3, 4] 那么第一個 bin 是 [1, 2)(包括 1,但不包括 2),第二個 bin 是 [2, 3)。 然而,最后一個 bin 是 [3, 4],其中包括 4。

有沒有我可以采用的簡單解決方案? 也就是說,一種不涉及手動固定邊緣的方法。 這是我可以做的,但這不是我想要的。 是否有我可以通過的標志或可以使用的不同方法?

這是一種(一種粗略的?)方法可以將最后一個垃圾箱變成半開而不是關閉。 我正在做的是從最右邊的 bin 的右側減去可能的最小值:

a = np.array([1, 1, 3, 2, 2, 6])
B = 3 # (in this example) 
bins = np.linspace(a.mean() - a.std(), a.mean() + a.std(), B + 1)
# array([ 0.79217487,  1.93072496,  3.06927504,  4.20782513]))
bins[-1] -= np.finfo(float).eps # <== this is the crucial line
np.histogram(a, bins = bins)

如果您對a中的值使用 float 以外的其他類型,請在對finfo的調用中使用不同的類型。 例如:

np.finfo(float).eps
np.finfo(np.float128).eps

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM