2

我正在使用以下方法将数组分箱到一组箱中np.digitize

data = np.array([1,5,6,15,25,60])
bins = np.array([ 5, 10, 20, 50])
result = np.digitize(data, bins)
# this fails
print bins[result]

我希望将数据放入箱中,并解释箱中的每个值都被解释为“小于或等于”除了最后一个箱,所有其他值都适合。有没有这样做的功能?在这种情况下,它将是:“x <= 5、5 < x <= 10、10 < x <= 20 和 20 < x <= 50,包括 x > 50”。在 numpy 中执行此操作的简洁方法是什么?

4

1 回答 1

4

当你说20 < x <= 50 including x > 50你的最后一个垃圾箱时,你真的是在说x>20。您可以x>20通过丢弃最后一箱50. np.digitize接受一个参数,该参数rightTrue允许您拥有类似于10 < x <= 20而不是默认的bin 行为10 <= x < 20

>>> data = np.array([1,5,6,15,25,60])
>>> bins = np.array([ 5, 10, 20])
>>> np.digitize(data, bins, right=True)
array([0, 0, 1, 2, 3, 3])
>>> 

您的代码bins[result]失败,因为虽然bins定义了 3 个值,但实际上有 4 个间隔(x<=5, 5<x<=10, 10<x<=20, 20<x)。因此,例如 65 将被放置在索引为 3 的 bin 中,即。第 4 个区间。的第四个值bins不存在,因此您的错误。

于 2013-10-20T21:53:27.080 回答