【问题标题】:How to transform an integer value sparse matrix to 0/1 value sparse matrix, Python如何将整数值稀疏矩阵转换为 0/1 值稀疏矩阵,Python
【发布时间】:2013-05-28 12:13:27
【问题描述】:

我有一个来自 sklearn 词袋矢量化器的稀疏矩阵。它是一个 csr_matrix,它的元素代表文档中的词频。但现在我需要的是 0/1 矩阵,其中 1 代表文档中存在的单词,所以我不关心实际频率。 不考虑背景问题,是这样的: 我有一个稀疏矩阵,

2 3 4 0 0 0
0 0 0 0 0 8
0 0 0 2 0 0
0 0 0 0 0 0

我希望所有非零元素都为 1,

1 1 1 0 0 0
0 0 0 0 0 1
0 0 0 1 0 0
0 0 0 0 0 0

我怎样才能做到这一点?我假设使用 todense() 然后循环不是一个好的选择,因为稀疏矩阵很大。有没有更好的办法?

【问题讨论】:

    标签: python matrix scipy sparse-matrix


    【解决方案1】:

    试试csr_matrix.sign。它应该正是您所需要的(尽管我自己没有尝试过)。

    【讨论】:

      【解决方案2】:

      我认为您可以从非零索引创建一个新矩阵(请参阅scipy.sparse.csr_matrix 参考)。假设您的稀疏矩阵名为 sp_m:

      sp_unit = csr_matrix( ([1]*len(sp_m.data), sp_m.nonzero()), shape=sp_m.shape )
      

      正如另一位用户指出的那样,您可以使用 sign 功能;但是,如果您有负值,我认为您需要对其进行平方:

      sp_unit = sp_m.sign.multiply(sp_m.sign)
      

      【讨论】:

      • 感谢您的详细解答! .sign() 似乎解决了我的问题
      • 请注意,如果您的稀疏矩阵中有负值​​,则在使用 .sign() 后,这些值将被转换为 -1。如果您在一般情况下真的只想要 0 和 1,请使用 .sign 与 .multiply 结合使用,如上所述。
      猜你喜欢
      • 2023-04-10
      • 2021-11-25
      • 2017-07-02
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多