2013-06-01 161 views
0

我從sklearn袋式矢量化器中有一個稀疏矩陣。它是一個csr_matrix,其元素表示文檔中的詞頻。但現在我需要的是0/1矩陣,其中1代表文檔中存在的單詞,所以我不關心實際的頻率。 忽略的背景問題,是這樣的: 我有一個稀疏矩陣,如何將一個整數值稀疏矩陣轉換爲0/1值稀疏矩陣,Python

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(),然後循環不是一個好的選擇,因爲稀疏矩陣很大。有沒有更好的辦法?

回答

1

嘗試csr_matrix.sign。它應該正是你所需要的(儘管我自己沒有嘗試過)。

+0

謝謝!它的工作 –

1

我想你可以從非零指數創建一個新矩陣(參見scipy.sparse.csr_matrix參考)。假設你的稀疏矩陣被命名爲sp_m:

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

OR

至於另一網友指出,你可以使用符號函數;不過,我認爲如果您有負值,您將需要將其平方:

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

謝謝你的詳細解答! .sign()似乎解決了我的問題 –

+0

請注意,如果在稀疏矩陣中有負值​​,那麼在使用.sign()後,這些值將被轉換爲-1。如果您在一般情況下確實只需要0和1,請將.sign與.multiply一起使用,如上所述。 – bcorso