我最近一直在尝试(有效地)执行以下操作
读取稀疏(csr)矩阵
选择行的子集
构造另一个矩阵(全零)
填充3.,并在2中获得子集。
我几乎可以达到以下目的:
input_matrix = scipy.io.loadmat(some_matrix)
random_indices = np.random.choice(input_matrix.shape[1], num_samples, replace=False)
second_matrix = sp.dok_matrix(input_matrix.shape)
## this takes up too much memory!
second_matrix[random_indices] = input_matrix[random_indices]
如何更有效地做到这一点?我不想在任何时候调用.todense(),因为这也会在内存中爆炸。凭直觉,应该可以掩盖矩阵的一部分吗?在numpy(密集)中,我只用零填充余数,但是对于csr矩阵,我不确定是否是这种方式。
谢谢!
答案 0 :(得分:0)
我测试了.dok和.csr格式,但是唯一不会导致空间爆炸的格式是:
second_matrix[random_indices] = input_matrix.tolil()[random_indices]
因此,.lil矩阵。
hpaulj的建议也很有意义,但我尚未对其进行测试(lil可以很好地完成我的任务)。