如何让numpy直方图包含右区间边界而非左区间边界?
让numpy.histogram包含右区间边界而非左的方法
要实现让numpy.histogram的区间包含右边界、不包含左边界,可以用以下几种方式:
方法1:给数据减去极小值
利用浮点数精度的极小值(np.finfo(float).eps)调整数据,让原本等于bin右边界的元素落入前一个区间:
import numpy as np array = np.array([1,1,1]) eps = np.finfo(float).eps counts, bins = np.histogram(array - eps, bins=np.arange(0,3)) print(counts, bins) # 输出:[3 0] [0 1 2]
这个方法的核心是通过微小偏移,让原本属于[1,2)区间的1,变成略小于1的值,从而被划入[0,1)区间,达到等效于区间(0,1]的统计效果。
方法2:使用np.digitize手动统计
用np.digitize并设置right=True参数(该参数会让区间变为(left, right]),再统计每个区间的元素数量:
import numpy as np array = np.array([1,1,1]) bins = np.arange(0,3) # 获取每个元素所属的bin索引 indices = np.digitize(array, bins, right=True) # 统计各索引的数量,注意索引从1开始,对应bins的区间(0,1], (1,2] counts = np.bincount(indices, minlength=len(bins))[1:] print(counts, bins) # 输出:[3 0] [0 1 2]
这里np.digitize(..., right=True)会把x <= bins[i]且x > bins[i-1]的元素分到第i个区间,刚好符合“包含右边界、不包含左边界”的需求,再通过np.bincount统计每个区间的元素数即可。
内容的提问来源于stack exchange,提问作者Luke Hickinbotham
相关产品推荐
相关产品推荐

