在scipy稀疏矩阵中选择行

时间:2018-04-16 15:46:51

标签: python scipy sparse-matrix

有没有办法在scipy稀疏矩阵中选择与某些给定索引相对应的行?虚拟方法不起作用:

sparse.eye(3)[:2, :]

返回错误。

1 个答案:

答案 0 :(得分:2)

当提出这样的问题时,你应该说超过'返回错误'。什么错误?这很重要。

但我会为你做这件事:

In [143]: m =sparse.eye(3)
In [144]: m
Out[144]: 
<3x3 sparse matrix of type '<class 'numpy.float64'>'
    with 3 stored elements (1 diagonals) in DIAgonal format>
In [145]: m[:2,:]
...
TypeError: 'dia_matrix' object is not subscriptable

错误很重要。它告诉我们这种特殊的稀疏格式没有实现索引。我们使用常见的coo格式会遇到相同的错误。但是使用csr(或lil)格式,索引有效:

In [146]: m =sparse.eye(3, format='csr')
In [147]: m
Out[147]: 
<3x3 sparse matrix of type '<class 'numpy.float64'>'
    with 3 stored elements in Compressed Sparse Row format>
In [148]: m[:2,:]
Out[148]: 
<2x3 sparse matrix of type '<class 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Row format>
In [149]: _.A
Out[149]: 
array([[1., 0., 0.],
       [0., 1., 0.]])

生成稀疏矩阵时,我喜欢显示它repr,它告诉我格式和大小。 print(m)str)以CU样式显示值。

sparse.eye生成dia格式作为默认值,因为非零值都在一个对角线上。其他稀疏函数会生成不同的默认格式。

dia页面显示了getrow方法:

In [153]: sparse.eye(3).getrow(1)
Out[153]: 
<1x3 sparse matrix of type '<class 'numpy.float64'>'
    with 1 stored elements in Compressed Sparse Row format>

但请注意返回矩阵的格式 - csr,而不是dia。格式具有易于彼此转换的方法。有些操作会为我们进行必要的转换。