我有一个长度为1024的向量g
和一个大小为32的较小向量f
,用于定义bin边界。 v
和f
按升序排序。我想返回长度为[v_1,v_2,v_3,...]
的{{1}}矢量数组,以便每个向量len(f)
在v_i
和g
之间包含f_i
的索引。是否有一种NumPy方法可以做一些不涉及循环的事情?
答案 0 :(得分:1)
您可以使用game_intro()
查找Quit
中client.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
,它返回f
中g
的每个元素所属的bin索引:
dg = np.digitize(g,f)
生成的矢量将包含不同大小的列表,因此您可能希望将其存储为列表:
for i in range(len(f)): v.append(np.argwhere(dg == i))