Python 如何创建一个没有内存错误的大矩阵?

Python 如何创建一个没有内存错误的大矩阵?,python,matrix,memory,out-of-memory,html-parsing,Python,Matrix,Memory,Out Of Memory,Html Parsing,我正在用Python分析一组HTML网页,为此我将网页分成几个块,然后我需要计算这些块之间的相似性,为每个块生成一个特征向量,然后比较所有向量 但是,我需要保存计算的所有相似性的结果,因此我需要一个大小为totalBlocks x totalBlocks的矩阵 在分析我的程序后,我发现我有大约35.000个块,所以它是一个非常大的矩阵(35000x35000),然后我在创建这个矩阵时出现了内存错误 下面是我创建矩阵的函数: #Function to inicialize a matrix wit

我正在用Python分析一组HTML网页,为此我将网页分成几个块,然后我需要计算这些块之间的相似性,为每个块生成一个特征向量,然后比较所有向量

但是,我需要保存计算的所有相似性的结果,因此我需要一个大小为totalBlocks x totalBlocks的矩阵

在分析我的程序后,我发现我有大约35.000个块,所以它是一个非常大的矩阵
(35000x35000)
,然后我在创建这个矩阵时出现了内存错误

下面是我创建矩阵的函数:

#Function to inicialize a matrix with number of rows and columns.
def inicializeMatrix(nColumns, nRows, value):
    return [[value for i in range(nColumns)] for j in range(nRows)]
这是我的错误:

Traceback (most recent call last):
  File ".\contentExtractorAlgorithm.py", line 329, in <module>
    main()
  File ".\contentExtractorAlgorithm.py", line 298, in main
    wordsDict, totalBlocks, nPages = contentExtractor(datasetFolder, tagSet, destFolder)                
  File ".\contentExtractorAlgorithm.py", line 234, in contentExtractor
    similarityMatrix = inicializeMatrix(totalBlocks, totalBlocks, -1)
  File ".\contentExtractorAlgorithm.py", line 110, in inicializeMatrix
    return [ [ value for i in range(nColumns) ] for j in range(nRows) ]
  File ".\contentExtractorAlgorithm.py", line 110, in <listcomp>
    return [ [ value for i in range(nColumns) ] for j in range(nRows) ]
  File ".\contentExtractorAlgorithm.py", line 110, in <listcomp>
    return [ [ value for i in range(nColumns) ] for j in range(nRows) ]
MemoryError
回溯(最近一次呼叫最后一次):
文件“\contentExtractorAlgorithm.py”,第329行,在
main()
文件“\contentExtractorAlgorithm.py”,第298行,在main中
wordsDict,totalBlocks,nPages=contentExtractor(datasetFolder,标记集,destFolder)
文件“\contentExtractorAlgorithm.py”,第234行,在contentExtractor中
similarityMatrix=inicializeMatrix(totalBlocks,totalBlocks,-1)
文件“\contentExtractorAlgorithm.py”,第110行,在inicializeMatrix中
返回[范围内i的值(n列)]范围内j的值(nRows)]
文件“\contentExtractorAlgorithm.py”,第110行,在
返回[范围内i的值(n列)]范围内j的值(nRows)]
文件“\contentExtractorAlgorithm.py”,第110行,在
返回[范围内i的值(n列)]范围内j的值(nRows)]
记忆者

那么我该如何解决这个问题呢?有什么帮助吗?非常感谢。

列表理解将在内存中构建整个内容,这显然是您不想要的。编写一个生成器函数,一次将内存量降至最低……或者购买并安装更多RAM。