numpy binning:如何获得满足谓词的数组索引

时间:2016-09-14 21:52:43

标签: python numpy

我有一个长度为1024的向量g和一个大小为32的较小向量f,用于定义bin边界。 vf按升序排序。我想返回长度为[v_1,v_2,v_3,...]的{​​{1}}矢量数组,以便每个向量len(f)v_ig之间包含f_i的索引。是否有一种NumPy方法可以做一些不涉及循环的事情?

2 个答案:

答案 0 :(得分:1)

您可以使用game_intro()查找Quitclient.replace(key, expiry, value [, persistTo] ,[ replicateTo]) 的排序位置。它们给出了你想要的范围的下限和上限:

例如,

searchsorted

数组f为您提供所需的所有信息:bin g的索引范围为In [42]: g Out[42]: array([ 1, 11, 19, 20, 21, 32, 36, 41, 47, 53, 54, 55, 65, 66, 69, 74, 76, 87, 89, 94]) In [43]: f Out[43]: [0, 10, 20, 50, 100] In [44]: binedges = g.searchsorted(f) In [45]: binedges Out[45]: array([ 0, 1, 3, 9, 20])

以下是如何在每个bin中创建明确的索引列表:

binedges

答案 1 :(得分:0)

首先要做的事情是:

import numpy as np

假设您有数据g

g = sorted((1e3 * np.random.random(1024)).astype(int))

和你的邮箱f

f = sorted((1e3 * np.random.random(32)).astype(int))

您可以使用numpy.digitize,它返回fg的每个元素所属的bin索引:

dg = np.digitize(g,f)

生成的矢量将包含不同大小的列表,因此您可能希望将其存储为列表:

for i in range(len(f)): v.append(np.argwhere(dg == i))