记忆错误:乘以两个矩阵

时间:2017-10-27 04:38:50

标签: python matrix sparse-matrix tf-idf

我遇到了以下问题:我有一个非常大的稀疏矩阵,它包含13M + nnz元素和一个大小约为的向量。 99K +。问题在于,当我迭代地将其存储在crs矩阵中时,它可以工作但需要3个小时才能完成。因此,我将矢量转换为对角矩阵,因此我可以直接将两者相乘。但是我一直在记忆错误(8位RAM与64位操作系统)。这是我的代码:

GG=list(chain.from_iterable(list(IDFMatrix.data)))
dictDocFreqMat=TermFreq.dot(GG) #memory Error
for i in range(counter):
    TermFreqCsr[i,:]=TermFreq[i].multiply(GG) # Takes 3 hours 
    progessbar.update(1)
progessbar.close()

有关此问题的任何建议吗?

2 个答案:

答案 0 :(得分:0)

你内存不足。你可以做的是转向pyspark获取这么大的数据。 Spark有一个块矩阵数据类型,您可以使用它来乘以两个矩阵。

a_mat = tfidf_vect.fit_transform([..., ..., ...])
b_mat = tfidf_vect.fit_transform([..., ..., ...])

a_block_mat = create_block_matrix(a_mat)
b_block_mat_tr = create_block_matrix(b_mat.transpose())
cosimilarities = a_block_mat.multiply(b_block_mat_tr)

来源:https://labs.yodas.com/large-scale-matrix-multiplication-with-pyspark-or-how-to-match-two-large-datasets-of-company-1be4b1b2871e(第三次尝试)

答案 1 :(得分:0)

感谢您的所有修改和建议。我通过重新安装python解决了我的问题。这是(遗憾的是我之前没有注意到)32位。安装64版本内存后出现错误问题