【问题标题】:Memory Eror : Multiplying two matrix内存错误:将两个矩阵相乘
【发布时间】:2018-04-08 14:53:34
【问题描述】:

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

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()

对这个问题有什么建议吗?

【问题讨论】:

  • 原因很简单:内存不足。您要么获得更多,要么优化您的程序以减少使用。

标签: python matrix sparse-matrix tf-idf


【解决方案1】:

感谢所有编辑和建议。我通过重新安装python解决了我的问题。它是(遗憾的是我之前没有注意到)32 位。安装64版后内存报错问题解决

【讨论】:

    【解决方案2】:

    您的内存不足。你可以做的是转向 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(第三次尝试)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多