我有一个名为$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]])
答案 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)