0

我有一个来自 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() 然后循环不是一个好的选择,因为稀疏矩阵很大。有没有更好的办法?

4

2 回答 2

2

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

于 2013-06-01T23:26:53.370 回答
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)
于 2013-06-01T23:40:37.360 回答