装箱

发布于 2021-01-29 16:39:44

我有一个数组A,我试图放入10个垃圾箱中。这是我所做的。

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

但是输出有11个容器,而不是10个,最后一个值(93)放置在容器11中,而应该放在容器10中。我可以用hack修复它,但是最优雅的方法是什么?如何分辨hist
[1]中的最后一个bin在右边包含数字-[]而不是[]?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    np.digitize方法不会产生此类异常(因为其用途有所不同),因此列表中最大的元素将放入一个额外的容器中。要获得与一致的仓位分配histogram,只需使用来将输出digitize限制为仓位数量fmin

    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])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看