python - 计算每个 bin 中有多少个值

标签 python arrays numpy partition

假设我有一组分区P区间 [0,1)P长度为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对于 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])

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

最佳答案

一种方法是使用 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])

关于python - 计算每个 bin 中有多少个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962682/

相关文章:

c - 多维数组的大小

java - 使用数组创建字符串

python - 提取 Pandas 中 dtype 为 'object' 的列的索引

python - 不要在轴上写出所有日期,Matplotlib

python - scipy.polyfit(x, y, 100) 将是 100 阶多项式,但 matplotlib.pyplot.legend 显示 53?

python - 我注意到我不能将 PriorityQueue 用于对象?

python - Return 语句的奇怪 Try-Except-Else-Finally 行为

python - 异构 numpy 数组上的数组操作

java - Python中通过反向循环获取字符或子字符串的索引

c - 如何在数组中使用 C 字符串?