繁体   English   中英

使用 numpy 计算范围内列表值的出现次数

[英]Using numpy to count occurences of list values in a range

我有一个二维数组范围和一个我想过滤的关联值列表。 我想获得属于每个范围的过滤值的数量。

例如,考虑:

  • 范围矩阵{{0,1},{1,4}}
  • 以及值列表{5,10,16,21}

假设我过滤x < 15 这将给出一个过滤后的索引数组{0,1} ,因为只有 5 和 10 小于 15,并且它们分别落在索引 0 和 1 处。

使用这个过滤后的数组,因为 0 在 [0,1) 范围内,1 在 [1,4) 范围内,所以 function 应该返回 (1,1)。

但是,如果我们过滤x%5 == 1 ,则过滤后的索引数组将是{2,3} (因为只有 16 和 21 mod 5 等价于 1,而 16 和 25 分别具有索引 2 和 3)和function 应该返回 (0,2),因为 2 和 3 都大于 1 且小于 4。

我知道如何使用循环来做到这一点,但我也不希望如此。

我不确定在 NumPy 中实现此功能的最佳方法是什么——我正在考虑使用np.where()但我不确定具体细节。 此外,不确定这是否是 go 关于解决此问题的最简单方法:是否有更简单的方法来确定一个范围内有多少过滤值?

这是一个解决方案(对于范围/箱相邻的情况,这似乎是您的情况):

a = np.array([5,10,16,21])
bins = [[0,1],[1,4]]
bins = [b[0] for b in bins] + [bins[-1][1]]

indices = np.arange(len(a))[a % 5 == 1]
np.histogram(indices, bins)[0]
# array([0, 2])

indices = np.arange(len(a))[a < 15]
np.histogram(indices, bins)[0]
# array([1, 1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM