NumPy:将稀疏矩阵从 R 导入 Python

any*_*ker 2 numpy matrix scipy sparse-matrix

我在 R 中有一个非常大且稀疏的矩阵,是使用“Matrix”包创建的,我想在 python + numpy 中处理。R 对象采用 csc 格式,如果我使用 Matrix 包中的 writeMM 函数将其导出,则输出如下所示:

%%MatrixMarket matrix coordinate real general
4589 17366 160441
22 1 5.954510725783322
36 1 29.77255362891661
41 1 23.81804290313329
74 1 5.954510725783322
116 1 59.54510725783322
127 1 11.909021451566645
159 1 17.863532177349967
Run Code Online (Sandbox Code Playgroud)

其中第一列是行,第二列是列,第三列是值。

我想知道如何将其导入到 python 中。我看到 scipy 有一个用于操作列压缩稀疏矩阵的模块,但它没有从文件创建稀疏矩阵的功能。

ldi*_*rer 6

您可以使用scipy.io.mmread来完成您想要的操作。

In [11]: mmread("sparse_from_file")
Out[11]: 
<4589x17366 sparse matrix of type '<class 'numpy.float64'>'
    with 7 stored elements in COOrdinate format>
Run Code Online (Sandbox Code Playgroud)

请注意,结果是 COO 稀疏矩阵。如果您想要一个,csc_matrix则可以使用sparse.coo_matrix.tocsc.

现在你提到你想用 numpy处理这个非常大且稀疏的矩阵。这可能是不切实际的,因为 numpy 仅在密集数组上运行,如果您的矩阵确实非常大且稀疏,您可能无法以密集格式存储它。

因此,您最好坚持针对scipy.sparse您的用例使用最有效的格式。