【问题标题】:NumPy: Importing a Sparse Matrix from R into PythonNumPy:将稀疏矩阵从 R 导入 Python
【发布时间】:2015-10-14 07:39:03
【问题描述】:

我在 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

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

我想知道如何将它导入 python。我看到 scipy 有一个模块可以处理列压缩的稀疏矩阵,但它没有从文件创建一个的功能。

【问题讨论】:

    标签: numpy matrix scipy sparse-matrix


    【解决方案1】:

    您可以使用 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>
    

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

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

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

    【讨论】:

    • 是的,你在 numpy 的速度上是对的——它甚至比使用 R 进行计算还要慢。但是,pyspark 的 SparseVector 速度很快,并且完成了与 numpy 相同的工作大约 1 小时。
    • 很高兴看到您找到了替代方案。 scipy.sparse 可能已经完成了这项工作,通常取决于为手头的计算选择正确的格式(它们在简单运算/线性代数等方面的性能方面非常不平等)。
    猜你喜欢
    • 2016-01-24
    • 2014-11-01
    • 2021-11-25
    • 2021-03-17
    • 1970-01-01
    • 2017-07-20
    • 2013-05-06
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多