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中有哪些高效的数据结构来存储和处理大型数据集?的主要内容,如果未能解决你的问题,请参考以下文章