【问题标题】:Binning in NumpyNumpy 中的分箱
【发布时间】:2016-11-30 04:57:21
【问题描述】:

我有一个数组 A,我试图将它放入 10 个容器中。这是我所做的。

A = range(1,94)
hist = np.histogram(A, bins=10)
np.digitize(A, hist[1])

但是输出有 11 个 bin,而不是 10 个,最后一个值 (93) 放在 bin 11 中,而它本应该在 bin 10 中。我可以通过 hack 修复它,但最优雅的做法是什么这?如何告诉 digitize hist[1] 中的最后一个 bin 包含在右侧 - [ ] 而不是 [ )?

【问题讨论】:

  • np.histogram的输出实际上有10个bin;计数是[10, 9, 9, 9, 9, 10, 9, 9, 9, 10]。也就是说,histogram 方法将最后一个 bin 的右边界视为包含。 digitize 没有;所以它与histogram准备的bin边缘不太兼容。
  • 谢谢 zaq - 有没有办法获取元素属于哪个 bin?虽然使用上面的排序列表很容易,但当我有一个未排序的列表时,这个问题就变得很有挑战性了。

标签: python numpy histogram


【解决方案1】:

np.histogram的输出实际上有10个bin;最后一个(最右边的)bin 包含最大的元素,因为它的右边缘是包容性的(与其他 bin 不同)。

np.digitize 方法不会产生这样的异常(因为它的目的不同),因此列表中最大的元素会被放入一个额外的 bin 中。要获得与histogram 一致的bin 分配,只需使用fmindigitize 的输出限制为bin 的数量。

A = range(1,94)
bin_count = 10
hist = np.histogram(A, bins=bin_count)
np.fmin(np.digitize(A, hist[1]), bin_count)

输出:

array([ 1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,
        2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,
        4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,
        6,  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,
        8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
       10, 10, 10, 10, 10, 10, 10, 10])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多