有没有办法在scipy稀疏矩阵中选择与某些给定索引相对应的行?虚拟方法不起作用:
sparse.eye(3)[:2, :]
返回错误。
答案 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。格式具有易于彼此转换的方法。有些操作会为我们进行必要的转换。