【问题标题】:How to select row by key column in O(1)? (Python Datatable)如何在 O(1) 中按键列选择行? (Python 数据表)
【发布时间】:2020-10-18 15:15:48
【问题描述】:

如何通过 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) 中访问,但我不知道实现这一目标的正确方法。

【问题讨论】:

  • 目前,键列的唯一特性是它在连接中的使用;我不认为它已经针对选择进行了优化或实施。
  • 谢谢sammywemmy,看来你是对的

标签: python datatable py-datatable


【解决方案1】:

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

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

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

【讨论】:

  • 很好的解决方法,但实际上,如果我只需要读取数据,如果我还需要更新选定的行,这是不合适的,对吧?
  • 是的,我按照你的问题的标题字面意思:“如何按键选择一行”。在更新的情况下,这个确切的解决方案不适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2017-01-20
  • 2017-03-14
  • 2019-04-05
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多