【问题标题】:placing numbers into bins with numpy用 numpy 将数字放入垃圾箱
【发布时间】:2013-10-20 20:12:29
【问题描述】:

我正在使用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]

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

【问题讨论】:

  • 您期望的确切结果是什么?

标签: python arrays numpy scipy


【解决方案1】:

当您为最后一个垃圾箱说 20 < x <= 50 including x > 50 时,您实际上是在说 x>20。您可以通过删除最后一个50 来获得x>20np.digitize 接受一个参数right,当True 允许你有像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 的第四个值不存在,因此您的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2016-05-22
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多