【问题标题】:Reading a few lines as Numpy array from a huge file从一个大文件中读取几行作为 Numpy 数组
【发布时间】:2017-03-04 15:34:20
【问题描述】:

我有一个文本文件,其中包含十亿个单词及其对应的 300 维单词向量。我需要从文件中提取数千个单词及其单词向量并将它们存储为 Numpy 数组。文本文件的大小为大约 1 GB。
天真地,我尝试使用 genfromtxt 将整个文件加载到数组中,但没有奏效。然后我尝试逐行读取整个文件(文件中的每一行由一个单词及其单词向量组成),寻找单词并提取单词向量,但我想,这需要每个单词遍历文件一次,因为我需要数千个单词,因此需要对整个文件进行数千次迭代。
最快、最有效的方法是什么?

【问题讨论】:

  • 由于genfromtxt 接受生成器作为输入,您可以创建一个来过滤掉所有不需要的行,因此genfromtxt 只会看到您希望它看到的单词。
  • 不清楚。您只是想阅读N 行,还是包含特定单词集的所有行?您始终可以逐行读取文件、解析每个文件、收集值并在需要时退出。不会比genfromtxt慢。
  • @hpaulj 我有一组单词,该组中的每个单词在文件中只出现一次。在文件中,该组中没有两个单词出现在同一行中,我正在尝试阅读与我的集合中的单词相对应的行。

标签: python-2.7 file numpy


【解决方案1】:

我不知道这是最快的(可能不是),但它工作得相当好(我在 >100,000 行的文件上测试过):

F = filter(lambda s: s.strip().split()[0] in word_set if s.strip() else False,
           open(fn, 'rt'))
x = np.genfromtxt(F, *yourargs, **yourkwds)

这适用于 Python2。在 Python3 中,似乎必须.encode() 输入。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2021-06-03
    相关资源
    最近更新 更多