从列表中删除scipy矩阵中的行

时间:2017-10-29 19:31:04

标签: python matrix scipy

我有一个名为$test->{'set'.$f}($something->{'get'.$f}()); 的整数列表,对应于名为cluster0Rand的scipy稀疏矩阵中的某些索引。

我想创建一个新的scipy矩阵,该矩阵只包含列中的索引?

例如,

data

所需的输出是:

data = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
cluster0Rand = [0,1]

如果真实列表由数千个索引组成且scipy矩阵为csr_matrix([[1, 2, 0], [0, 0, 3]])

,我该如何才能有效地执行此操作

1 个答案:

答案 0 :(得分:1)

根据您的示例,普通索引可以完成工作:

In [300]: data = sparse.csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
In [301]: idx = [0,1]
In [302]: data[idx,:]
Out[302]: 
<2x3 sparse matrix of type '<class 'numpy.int32'>'
    with 3 stored elements in Compressed Sparse Row format>
In [303]: _.A
Out[303]: 
array([[1, 2, 0],
       [0, 0, 3]], dtype=int32)

这种索引使用稀疏矩阵比密集数组慢。但它使用稀疏矩阵强度,矩阵乘法。它将idx转换为选择器矩阵。

In [313]: (sparse.csr_matrix([[1,0,0],[0,1,0]])*data).A
Out[313]: 
array([[1, 2, 0],
       [0, 0, 3]], dtype=int32)