我遇到了以下问题:我有一个非常大的稀疏矩阵,它包含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()
有关此问题的任何建议吗?
答案 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)
答案 1 :(得分:0)
感谢您的所有修改和建议。我通过重新安装python解决了我的问题。这是(遗憾的是我之前没有注意到)32位。安装64版本内存后出现错误问题