繁体   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