python中有哪些高效的数据结构来存储和处理大型数据集?

时间:2018-03-06 05:53:55

标签: python data-structures

我正在尝试为OCR系统创建数据加载器。我有1k文档图像,其中每个文档包含大约200行文本。目前,我正在提取每个线条图像及其基本事实,然后将它们附加到列表中。我想知道是否有任何有效的数据结构,我可以快速存储和检索数据,而不会占用太多内存。

    class OCRDataset(tud.Dataset):
        def __init__(self, **kwargs):
            self.config = kwargs['config']
            self.dir = self.config['dir']
            self.books = self.config["books"]
        def __len__(self):
            return len(self.books)
        def __getitem__(self, idx):
            pagewise = read_book(book_path=os.path.join(self.dir, self.books[idx]))
            sequences, targets = pagewise
            samples = [(sequences[i], targets[i]) for i in range(len(sequences))]
            return samples

    total = []
    dataset = OCRdataset(config=config)
    for i in range(len(dataset)):
        sample = dataset[i]
        total.extend(sample)

正如您所看到的,class OCRdataset需要一本书并返回包含图像和注释的元组列表。我有几本这样的书,我使用for循环遍历每本书,然后在每次迭代后扩展列表total。瓶颈是在扩展前几本书的清单后,我的系统最终开始减速。如果有人能提出更好的方法,我将不胜感激。 谢谢

编辑:使用total列表背后的想法是将多本书中的数据加载到单个数据结构中,这样我就可以将数据拆分为训练和验证集,然后用它来训练我的分类器。

编辑2 :函数read_book获取文档图像集合,并返回包含线图像的元组列表及其特定图书的注释。

1 个答案:

答案 0 :(得分:1)

我建议将它直接写入逐行输出,而不是在你的记忆中保留一个巨大的物体。

portrait

为了检索数据我建议使用pandas,因为它允许使用迭代器(看一下DataFrame.read_csv()函数的chunksize选项)

相关问题