请考虑以下列表short_list和long_list
short_list = list('aaabaaacaaadaaac')
np.random.seed([3,1415])
long_list = pd.DataFrame(
np.random.choice(list(ascii_letters),
(10000, 2))
).sum(1).tolist()
Run Code Online (Sandbox Code Playgroud)
如何按唯一值计算累积计数?
我想使用numpy并在线性时间内完成.我希望这可以将时间与其他方法进行比较.用我的第一个提出的解决方案来说明这可能是最简单的
def pir1(l):
s = pd.Series(l)
return s.groupby(s).cumcount().tolist()
print(np.array(short_list))
print(pir1(short_list))
['a' 'a' 'a' 'b' 'a' 'a' 'a' 'c' 'a' 'a' 'a' 'd' 'a' 'a' 'a' 'c']
[0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 8, 0, 9, 10, 11, 1]
Run Code Online (Sandbox Code Playgroud)
我试图使用折磨自己,np.unique因为它返回一个计数数组,一个反向数组和一个索引数组.我确信我可以通过这些来解决问题.我得到的最好的是pir4在二次时间内缩放.另请注意,我不关心计数是从1还是零开始,因为我们可以简单地加1或减1.
以下是我的一些尝试(没有一个回答我的问题)
%%cython
from collections import defaultdict
def get_generator(l):
counter = defaultdict(lambda: -1)
for i in …Run Code Online (Sandbox Code Playgroud)