相关疑难解决方法(0)

如何使用numpy在线性时间内通过唯一值获取累积计数?

请考虑以下列表short_listlong_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)

python numpy pandas

6
推荐指数
2
解决办法
921
查看次数

标签 统计

numpy ×1

pandas ×1

python ×1