计算每个箱中有多少值

问题描述 投票:2回答:1

假设我在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-10<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

有没有办法在不使用循环的情况下执行此操作?

python arrays numpy partition
1个回答
1
投票

一种方法是使用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,它将完全符合我们的要求。请注意,返回的binning数组将具有最多0计数,这意味着它还将输出缺失值的2计数,在这种情况下为[0.05,0.1),对应于区间np.bincount(s)[1:] # array([1, 0, 2, 4, 3])

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.