内存错误:将两个矩阵相乘
Memory Eror : Multiplying two matrix
我遇到以下问题:我有一个非常大的稀疏矩阵,其中包含 13M+ nnz 个元素和一个大小约为 13M 的向量。 99k+。问题是当我迭代乘法并将其保存在 crs 矩阵中时它可以工作但需要 3 个小时才能完成。因此,我将向量转换为对角矩阵,这样我就可以直接乘以 two.However 我一直在处理内存错误(8 GB 内存和 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()
关于这个问题有什么建议吗?
你 运行 内存不足。您可以做的是转向 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)
感谢所有编辑和建议。我已经通过重新安装 python 解决了我的问题。它是(遗憾的是我之前没有注意到)32 位。安装 64 版本后内存错误问题已解决
我遇到以下问题:我有一个非常大的稀疏矩阵,其中包含 13M+ nnz 个元素和一个大小约为 13M 的向量。 99k+。问题是当我迭代乘法并将其保存在 crs 矩阵中时它可以工作但需要 3 个小时才能完成。因此,我将向量转换为对角矩阵,这样我就可以直接乘以 two.However 我一直在处理内存错误(8 GB 内存和 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()
关于这个问题有什么建议吗?
你 运行 内存不足。您可以做的是转向 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)
感谢所有编辑和建议。我已经通过重新安装 python 解决了我的问题。它是(遗憾的是我之前没有注意到)32 位。安装 64 版本后内存错误问题已解决