【问题标题】:Count how many values fall in each bin计算每个 bin 中有多少值
【发布时间】:2019-07-24 13:14:46
【问题描述】:

假设我在间隔[0,1) 上有一组分区PP 的长度为 N。例如:

P = np.array([0,0.05,0.1,0.3,0.7,1])

[0,1) 划分为以下区间:

[0,0.05), [0.05,0.1), [0.1,0.3), [0.3,0.7) , [0.7,1)

我有另一个数组U,长度为K,超过[0,1),其元素为u+i/K for i = 0,...,K-1,其中0<u<1/K。例如

U = np.array([0.03,0.13,0.23,0.33,0.43,0.53,0.63,0.73,0.83,0.93])

我想计算U 中落入每个分区j = 0, ..., N-1 的元素数量。在这个例子中,我们有

C = np.array([1,0,2,4,3])

有没有办法在不使用循环的情况下做到这一点?

【问题讨论】:

    标签: python arrays numpy partition


    【解决方案1】:

    一种方法是使用np.searchsorted 获取索引,其中U 中的元素应插入P 以保持顺序,然后使用np.bincount 获取每个索引出现次数的计数:

    np.bincount(np.searchsorted(P,U))[1:]
    # array([1, 0, 2, 4, 3])
    

    或者使用np.digitize 假设箱总是单调增加:

    np.bincount(np.digitize(U,P))[1:]
    # array([1, 0, 2, 4, 3])
    

    详情

    P = np.array([0,0.05,0.1,0.3,0.7,1])
    U = np.array([0.03,0.13,0.23,0.33,0.43,0.53,0.63,0.73,0.83,0.93])
    

    如前所述,np.searchsorted 将返回U 中的元素应插入P 的索引,以便后者保持有序:

    s = np.searchsorted(P,U)
    # array([1, 3, 3, 4, 4, 4, 4, 5, 5, 5])
    

    接下来我们要计算每个索引的出现次数。为此,我们可以使用np.bincount,它将完全按照我们的意愿行事。请注意,返回的分箱数组将有多达np.amax(x)+1 计数,这意味着它还将输出0 的缺失值计数,在这种情况下为2,对应于区间[0.05,0.1)

    np.bincount(s)[1:]
    # array([1, 0, 2, 4, 3])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多