在Python

时间:2015-05-08 09:37:59

标签: python performance optimization scipy sparse-matrix

我有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个小时后没有得到矩阵)。有什么想法来优化我的代码吗?

1 个答案:

答案 0 :(得分:2)

首先,不要将数组命名为dict,这会使内置类型dict变得混乱。

这里的问题是你在二次时间内做所有事情,所以首先将数组dictid转换为字典,其中每个wordid点到它的索引。

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