我有一个向量,对应于一系列时间段中发生的事件数。我需要获取一个包含每个事件的时间段索引的向量。
使用普通的Python循环执行此操作非常简单:
import numpy as np
def bincounts2indices(bincounts):
indices = tuple()
for ii, count in enumerate(bincounts):
indices += (ii,) * count
return np.array(indices)
x = np.array([2, 4, 2, 3, 2, 3, 4, 0, 1, 2])
print bincounts2indices(x)
# [0 0 1 1 1 1 2 2 3 3 3 4 4 5 5 5 6 6 6 6 8 9 9]
不幸的是,这在我的代码中是一个瓶颈。我可以使用像Cython或Numba这样的东西加速它,但这看起来有点过分,我不想添加额外的依赖。
是否有人知道采用纯粹的numpy / scipy方式有效地做到这一点?