首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy binning:如何获得满足谓词的数组索引

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

Stack Overflow用户
提问于 2016-09-15 05:52:43
回答 2查看 454关注 0票数 0

我有一个长度为1024的值的向量g和一个大小为32的较小的向量f来定义bin边界。vf按升序排序。我想返回一个向量数组,即长度为len(f)[v_1,v_2,v_3,...],这样每个向量v_i都包含f_if_i + 1之间的g的索引。有没有一种NumPy方法可以做这样的事情而不涉及循环?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 11:14:44

您可以使用searchsorted查找fg中的排序位置。它们给出了所需范围的下限和上界:

例如,

代码语言:javascript
复制
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])

数组binedges提供了您需要的所有信息: bin k的索引范围是range(binedges[k], binedges[k+1])

下面是如何在每个bin中创建索引的显式列表:

代码语言:javascript
复制
In [46]: rngs = [list(range(binedges[k], binedges[k+1])) for k in range(len(binedges)-1)]

In [47]: rngs
Out[47]: [[0], [1, 2], [3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
票数 2
EN

Stack Overflow用户

发布于 2016-09-15 06:25:14

首先要做的是:

代码语言:javascript
复制
import numpy as np

假设您有自己的数据g

代码语言:javascript
复制
g = sorted((1e3 * np.random.random(1024)).astype(int))

和你的垃圾桶f

代码语言:javascript
复制
f = sorted((1e3 * np.random.random(32)).astype(int))

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

代码语言:javascript
复制
dg = np.digitize(g,f)

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

代码语言:javascript
复制
for i in range(len(f)): v.append(np.argwhere(dg == i))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39500218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档