0

sklearn bag-of-words ベクトライザーからのスパース行列があります。これは 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 に答える