2015-02-11 50 views
1

我有一個以scipy sparse csr_matrix格式存儲的大型(60,000 x 60,000)對稱文檔相似性矩陣。在python中過濾大型稀疏矩陣

我想查找所有高於某個值的值的索引。換句話說,所有文檔對的相似度分數都大於某個值。

當我嘗試像

matrix > 0.9 

我IPython的內核崩潰。

我是新來的scipy和numpy,所以任何幫助將不勝感激。

+2

你能發佈ipython崩潰的錯誤消息嗎? – 2015-02-11 20:30:54

+0

這只是一個對話框,說的是「內核已經停止並將被重新啓動」。很確定這是由於矩陣的大小。 – 2015-02-11 21:13:47

回答

1

我會嘗試在一個較小的數據集 的執行操作我只是想

In [22]: import scipy.sparse as sps 
In [23]: m = sps.csr_matrix(np.random.rand(100,100)) 

In [24]: m 
Out[24]: 
<100x100 sparse matrix of type '<type 'numpy.float64'>' 
    with 10000 stored elements in Compressed Sparse Row format> 

In [25]: m > .5 
Out[25]: 
<100x100 sparse matrix of type '<type 'numpy.bool_'>' 
    with 5028 stored elements in Compressed Sparse Row format> 

所以這似乎工作。也許你的矩陣太大/密集。你自己創建了scipy嗎?也許有一個構建錯誤導致它崩潰。

什麼是您的操作系統/版本的Python/scipy版本?

import scipy 
scipy.__version__ 
+0

我的scipy版本是0.14.1。是的,矩陣非常大,密度很高。有〜3,000,000,000非零的條目。我認爲這是問題。我想知道是否有任何技巧來解決這個問題(也許某種方式來有效地將非常小的條目舍入爲零?) – 2015-02-11 20:41:41

+0

這是一個好主意,但我不知道如何離手。我會考慮設置一個精確標誌。你如何構造矩陣?也許你可以在數據進入之前將其歸零? – Erotemic 2015-02-11 20:45:11