我有3个数组:数组“单词”对[“id”:“单词”]长度为5000000,数组“ids”表示唯一ID,长度为13000,数组“dict”表示唯一单词(字典)长度500000.这是我的代码:
matrix = sparse.lil_matrix((len(ids), len(dict)))
for i in words:
matrix[id.index(i['id']), dict.index(i['word'])] += 1.0
但是效果太慢(我工作15个小时后没有得到矩阵)。有什么想法来优化我的代码吗?
答案 0 :(得分:2)
首先,不要将数组命名为dict
,这会使内置类型dict
变得混乱。
这里的问题是你在二次时间内做所有事情,所以首先将数组dict
和id
转换为字典,其中每个word
或id
点到它的索引。
matrix = sparse.lil_matrix((len(ids), len(dict)))
dict_from_dict = {word: ind for ind, word in enumerate(dict)}
dict_from_id = {id: ind for ind, id in enumerate(id)}
for i in words:
matrix[dict_from_id[i['id']], dict_from_dict[i['word']] += 1.0