【发布时间】:2018-04-05 12:06:58
【问题描述】:
当我运行我的脚本(用于机器学习)时,我需要创建一个非常大的字典(来自 Google GloVe,400,000 个条目由一个键和每个键 100 个元素的向量组成)。这里的问题是创建字典大约需要 60--160 秒,但我需要将其减少 很多,最好降至 10 秒以下。我目前有两种方法(数字和字母都是随机的,不是下面显示的):
1) 运行以下命令(大约需要 60 秒):
file_input = codecs.open('dictFile.txt', 'r', 'UTF-8')
myDict = {}
for line in file_input:
line = line.strip()
line = line.split(' ')
if len(line)==0:continue
token = line[0]
vector = np.array([float(x) for x in line[1:]])
myDict[token] = vector
file_input.close()
其中dictFile.txt的结构如下:
a 1 2 3 4 5 6 ... 100
b 1 2 3 4 5 6 ... 100
...
c 1 2 3 4 5 6 ... 100
2) 运行以下命令(大约需要 160 秒)
readFile = open('dictFile.py', 'r', encoding='utf8')
for line in readFile:
exec(line)
dictFile.py 的格式如下:
import numpy as np
myDict = {}
myDict['a']=np.array([1, 2, 3, ... , 100])
myDict['b']=np.array([1, 2, 3, ... , 100])
...
myDict['c']=np.array([1, 2, 3, ... , 100])
问题是我不能简单地运行
from dictFile import myDict
因为这使我的内存不足(并使我的电脑挂起大约 10 分钟)。谁能给我一个关于如何加快进程的建议?我怎样才能尽快获得访问/创建我的字典?有什么方法可以创建一次并保存以备将来使用?
感谢所有答案!
【问题讨论】:
-
除非您的程序在您尝试
exec文件之前释放大量内存,否则我看不出您的方法不会导致内存不足错误。 -
我的猜测是创建 400,000 个 numpy 数组很慢,而不是字典。您可以尝试将这些数组转换为仅按需成为数组的生成器,这样字典就只保存生成器,而不必一次解析所有这些行。
标签: python performance dictionary memory