2017-06-23 43 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非常容易实现,并做到位,所以应该防止分配任何额外的内存。