2017-06-23 45 views
0

我有一個形狀爲csr_matrix(40000000,1600000)。我用下面的方法來洗牌這個矩陣:混洗時的分段錯誤csr_matrix

index = np.arange(np.shape(csr_matrix)[0]) np.random.shuffle(index) csr_matrix_new = csr_matrix[index, :]

但得到的錯誤「段錯誤」。

我已經在小型csr_matrix上測試過這種洗牌方法,它工作。 有誰知道如何解決它?

回答

0

這聽起來像是一個記憶問題。我可以在我的機器上打碎這種大小的矩陣。它花了大約2.5GB的RAM。

如果您正在從unix shell運行應用程序,則分段錯誤可能是由於進程內存不足造成的。但是,如果你從python shell運行,你應該得到一個MemoryError。

只需要添加,您還可以使用sklearn.utils.shuffle爲您做洗牌(請注意內存使用情況相同)。

from sklearn.utils import shuffle 
csr_matrix_new = shuffle(csr_matrix) 
0

你知道'np.random.shuffle'使用什麼樣的混洗算法嗎?

看看Fisher-Yates shuffle非常容易實現,並做到位,所以應該防止分配任何額外的內存。