如何将整数值稀疏矩阵变换为0/1值稀疏矩阵,Python

时间:2013-06-01 23:14:41

标签: python matrix scipy sparse-matrix

我有一个来自sklearn bag-of-words vectorizer的稀疏矩阵。它是一个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()然后循环不是一个好选择,因为稀疏矩阵很大。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我认为你可以从非零指数创建一个新矩阵(参见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)