Python中填充2d数组的有效方法

Python中填充2d数组的有效方法,python,performance,optimization,scipy,sparse-matrix,Python,Performance,Optimization,Scipy,Sparse Matrix,我有3个数组:按长度5000000排列成对的“单词”[“id”:“单词”],按长度13000排列唯一id的“id”,按长度500000排列唯一单词(字典)的“dict”。这是我的代码: matrix = sparse.lil_matrix((len(ids), len(dict))) for i in words: matrix[id.index(i['id']), dict.index(i['word'])] += 1.0 但是它工作得太慢了(我工作了15个小时后还没有得到矩阵)。有

我有3个数组:按长度5000000排列成对的“单词”[“id”:“单词”],按长度13000排列唯一id的“id”,按长度500000排列唯一单词(字典)的“dict”。这是我的代码:

matrix = sparse.lil_matrix((len(ids), len(dict)))
for i in words:
    matrix[id.index(i['id']), dict.index(i['word'])] += 1.0

但是它工作得太慢了(我工作了15个小时后还没有得到矩阵)。有什么办法可以优化我的代码吗?

首先,不要给数组命名
dict
,它既容易混淆又隐藏了内置类型
dict

这里的问题是,你做的每件事都是在二次时间内完成的,因此首先将数组
dict
id
转换为一个字典,其中每个
单词或
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