如何使用Scipy处理巨大的稀疏矩阵构造?

时间:2014-10-25 14:00:24

标签: scipy data-mining sparse-matrix information-retrieval pagerank

所以,我正在开发一个维基百科转储来计算大约5,700,000页的页面值。 这些文件是经过预处理的,因此不是XML格式 它们取自http://haselgrove.id.au/wikipedia.htm 格式为:

from_page(1): to(12) to(13) to(14)..
from_page(2): to(21) to(22)..
.
.
.
from_page(5,700,000): to(xy) to(xz)
等等。所以。基本上它是[5,700,000*5,700,000]矩阵的构造,它只会打破我的4演出RAM。因为它非常稀疏,使用scipy.lil.sparsescipy.dok.sparse更容易存储,现在我的问题是:

我如何将带有链接信息的.txt文件转换为稀疏矩阵?读取它并将其计算为正常的N * N矩阵然后将其转换为什么?我不知道。

此外,链接有时跨越线,那么处理它的正确方法是什么? 例如:随机线就像..

[
1: 2 3 5 64636 867
2:355 776 2342 676 232
3: 545 64646 234242 55455 141414 454545 43
4234 5545345 2423424545
4:454 6776
]

完全是这样的:没有逗号和&没有分隔符。

有关稀疏矩阵构造和跨线数据处理的任何信息都会有所帮助。

1 个答案:

答案 0 :(得分:1)

Scipy提供了稀疏矩阵的几种实现。他们每个人都有自己的优点和缺点。您可以找到有关矩阵格式here的信息:

有几种方法可以获得所需的稀疏矩阵。由于存储器要求很高(约10 ^ 12个条目!),计算完整的NxN矩阵然后转换可能是不可能的。

在您的情况下,我会准备您的数据以构建coo_matrix

coo_matrix((data, (i, j)), [shape=(M, N)])

data[:] the entries of the matrix, in any order
i[:] the row indices of the matrix entries
j[:] the column indices of the matrix entries

您可能还想查看lil_matrix,它可用于逐步构建矩阵。

创建矩阵后,您可以将其转换为更适合的计算格式,具体取决于您的使用情况。

我不认识数据格式,可能有解析器,可能没有。但是,编写自己的解析器应该不是很困难。每行包含冒号开始一个新行,冒号后的所有索引和没有冒号的连续行都是该行的列条目。