将稀疏矩阵转储到文件中

Posted

技术标签:

【中文标题】将稀疏矩阵转储到文件中【英文标题】:Dump a sparse matrix into a file 【发布时间】:2011-08-30 13:26:00 【问题描述】:

我有一个scipy.sparse.csr 矩阵,想将其转储到 CSV 文件中。有没有办法保持矩阵的稀疏性并将其写入 CSV?

【问题讨论】:

你打算如何使用稀疏的 CSV 文件?读取 CSV 文件的现有程序将假定每行包含一行,并且字段用逗号分隔。也许压缩文件可以得到你想要的。 我将它用于另一项任务。 CSV 可能是错误的选择。我想要一个文本文件,对于矩阵中的每一行,我只得到非零值的值。目前,我已经使用一些代码完成了这项工作。我只是想知道它是否可以更智能地完成。 【参考方案1】:

SciPy 包括通过 scipy.io module 以 MatrixMarket 格式读取/写入稀疏矩阵的函数,包括 mmwrite:http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.mmwrite.html

MatrixMarket 不是 CSV,而是关闭的。它由一个包含#rows、#cols、# of nonzeros 的单行标题组成,然后是每个非零的一行。这些行中的每一行都是行索引、列索引、值。您可以编写一个将空格转换为逗号的简单脚本,然后您将拥有一个 CSV。

【讨论】:

【参考方案2】:

现在有了 Scipy 0.19,这超级简单:

import scipy.sparse as sp
m = sp.csr_matrix([[1,0,0],[0,1,0],[0,0,1]])

sp.save_npz("file_name.npz", m)

加载文件到内存

new_m = sp.load_npz("file_name.npz")

【讨论】:

以上是关于将稀疏矩阵转储到文件中的主要内容,如果未能解决你的问题,请参考以下文章

将一个 numpy 稀疏矩阵保存到文件中

如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?

将稀疏 scipy 矩阵加载到现有的 numpy 密集矩阵中

将 1.2GB 的边列表转换为稀疏矩阵

大型稀疏矩阵分解

将犰狳中的矩阵从稀疏转换为密集(spmat 到 mat)