Scipy稀疏矩阵行宽幅

时间:2019-02-28 06:17:17

标签: python scipy

我最近一直在尝试(有效地)执行以下操作

  1. 读取稀疏(csr)矩阵

  2. 选择行的子集

  3. 构造另一个矩阵(全零)

  4. 填充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矩阵,我不确定是否是这种方式。

谢谢!

1 个答案:

答案 0 :(得分:0)

我测试了.dok和.csr格式,但是唯一不会导致空间爆炸的格式是:

second_matrix[random_indices] = input_matrix.tolil()[random_indices]

因此,.lil矩阵。

hpaulj的建议也很有意义,但我尚未对其进行测试(lil可以很好地完成我的任务)。