Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字典子集高效地填充SciPy稀疏矩阵_Python_Python 2.7_Scipy_Counter_Sparse Matrix - Fatal编程技术网

Python 从字典子集高效地填充SciPy稀疏矩阵

Python 从字典子集高效地填充SciPy稀疏矩阵,python,python-2.7,scipy,counter,sparse-matrix,Python,Python 2.7,Scipy,Counter,Sparse Matrix,我需要在几个14000x1000矩阵中存储单词共现计数。因为我知道矩阵是稀疏的,并且我没有足够的RAM来存储它们作为密集矩阵,所以我将它们存储为scipy.sparse矩阵 我已经找到了使用计数器对象收集计数的最有效方法。现在我需要将计数从计数器对象转移到稀疏矩阵,但这需要花费太长时间。目前填充矩阵需要18个小时 我使用的代码大致如下: for word_ind1 in range(len(wordlist1)): for word_ind2 in range(len(wordlist2

我需要在几个14000x1000矩阵中存储单词共现计数。因为我知道矩阵是稀疏的,并且我没有足够的RAM来存储它们作为密集矩阵,所以我将它们存储为scipy.sparse矩阵

我已经找到了使用计数器对象收集计数的最有效方法。现在我需要将计数从计数器对象转移到稀疏矩阵,但这需要花费太长时间。目前填充矩阵需要18个小时

我使用的代码大致如下:

for word_ind1 in range(len(wordlist1)):
    for word_ind2 in range(len(wordlist2)):
        word_counts[word_ind2, word_ind1]=word_counters[wordlist1[word_ind1]][wordlist2[word_ind2]]
其中,
word\u counts
是scipy.sparse.lil\u矩阵对象,
word\u counters
是计数器字典,
wordlist1
wordlist2
是字符串列表


有什么方法可以更有效地执行此操作吗?

您使用的是LIL矩阵,不幸的是,它有一个线性时间插入算法。因此,以这种方式构建它们需要二次时间。尝试使用DOK矩阵,它们使用哈希表进行存储

但是,如果您对布尔项出现感兴趣,那么如果您有稀疏项文档矩阵,则计算共现矩阵的速度要快得多。假设
A
是这样一个形状矩阵
(n_文档,n_术语)
,则共现矩阵为

A.T * A

什么是
word\u counts
?这是我试图填充的稀疏矩阵。我刚刚编辑了这个问题来说明这一点。很明显,但是什么类型的稀疏矩阵?再次编辑说它是一个lil_矩阵。尝试其他类型的稀疏矩阵可能是值得的,但SciPy文档表示,建议使用这种类型的矩阵进行增量填充,并且如果稀疏结构在填充过程中发生变化,那么它们仍然存在吗?我接受了一个补丁,该补丁改变了LIL矩阵的建议,因为除非对项目进行预排序,否则实际构建它们可能非常昂贵。dok_矩阵类型的速度要快得多。谢谢你的回答。