1

如何在 O(1) 中按键值获取行?

我在文档中找到的唯一选择行的方法是行选择器,它似乎没有利用列的键控状态。

例如在此表中:

size = 10**4
DT = dt.Frame({'id':range(size)})
DT.key = 'id'

与按行号访问相比,使用行选择器访问真的很慢:

for i in range(size):
    DT[dt.f.id==i,:]
# ~2.61 s

for i in range(size):
    DT[i,:]
# ~0.03 s

由于该列是键控的,我的期望是能够在 O(1) 中访问,但我不知道实现这一目标的正确方法。

4

1 回答 1

0

使用 join 模拟行选择器可以获得更快的结果:

for i in range(size):
    dt.Frame(id = [i])[:, :, dt.join(DT)]
# ~0.4 s

我相信创建一个中间帧dt.Frame(id = [i])是缓慢的部分。

于 2020-10-21T03:32:24.140 回答