簡體   English   中英

Python 3(3.5)-快速加載非常大的字典

[英]Python 3 (3.5) - Load a very large dictionary fast

我遇到的問題是,在運行腳本(用於機器學習)時,我需要創建一個非常大的字典(從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

因為這會使我內存不足(並使PC掛起大約10分鍾)。 誰能給我一個加快程序的建議? 如何盡快訪問/創建我的詞典? 有什么可能的方法可以一次創建並保存以備將來使用?

感謝所有答案!

如果您需要等到程序中的某個點實際分配dict ,請定義一個函數來創建並返回它,以便您可以控制何時調用它。

dictFile.py

import numpy as np

def create_mydict():
    myDict = {}
    myDict['a'] = np.array(...)
    ...

然后在您的代碼中

myDict = dictFile.create_mydict()

如果確實需要myDict作為模塊級變量存在,則可以這樣聲明它並讓create_mydict()填充全局變量。

import numpy as np

myDict = None
def create_mydict():
    global myDict
    myDict['a'] = ...
    ...

您還可以根據需要有條件地調用create_mydict

if dictFile.myDict is None:
    dictFile.create_mydict()

這需要你使用import dictFile ,而不是from dictFile import myDict ,因為后者從創建一個單獨的全局名稱dictFile.myDict未受到調用create_mydict

您可以嘗試通過多個線程之間的(400000 / CPU_core)行的塊來讀取文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM