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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中有哪些高效的数据结构来存储和处理大型数据集?相关的知识,希望对你有一定的参考价值。

我正在尝试为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获取文档图像的集合,并返回包含线图像的元组列表以及特定书籍的注释。

答案

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

file=open("outputfile.txt")
dataset = OCRdataset(config=config)
for i in range(len(dataset)):
   sample = dataset[i]
   file.write(sample)
file.close()

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

以上是关于python中有哪些高效的数据结构来存储和处理大型数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何用内存高效的数据结构替换大型 python 字典?

机器学习入门——numpy100练习题

Python-实现图表绘制总结

1.numpy知识点总结

python库介绍------Numpy

Hadoop大家庭有哪些?Hadoop家族主要成员关系