Python 将稀疏scipy矩阵切片为每10行和每10列的子样本

Python 将稀疏scipy矩阵切片为每10行和每10列的子样本,python,numpy,sparse-matrix,slice,subsampling,Python,Numpy,Sparse Matrix,Slice,Subsampling,我尝试将一个scipy稀疏矩阵作为numpy矩阵进行子采样,如下所示,以获得每10行和每10列: connections = sparse.csr_matrix((data,(node1_index,node2_index)), shape=(dimensions,dimensions)) connections_sampled = np.zeros((dimensions/10, dimensions/10)) connectio

我尝试将一个scipy稀疏矩阵作为numpy矩阵进行子采样,如下所示,以获得每10行和每10列:

connections = sparse.csr_matrix((data,(node1_index,node2_index)),
                                shape=(dimensions,dimensions))
connections_sampled = np.zeros((dimensions/10, dimensions/10))
connections_sampled = connections[::10,::10]
但是,当我运行这个并查询连接的形状时,我得到的是连接的原始维度,而不是减少了10倍的维度


这种类型的子采样现在适用于稀疏矩阵吗?当我使用较小的矩阵时,这似乎是可行的,但我无法得到正确的答案。

您不能对CSR矩阵的每10行和每10列进行采样,至少在Scipy 0.12中没有:

>>> import scipy.sparse as sps
>>> a = sps.rand(1000, 1000, format='csr')
>>> a[::10, ::10]
Traceback (most recent call last):
...    
ValueError: slicing with step != 1 not supported
不过,您可以先将其转换为LIL格式的矩阵:

>>> a.tolil()[::10, ::10]
<100x100 sparse matrix of type '<type 'numpy.float64'>'
    with 97 stored elements in LInked List format>
>>> a.tolil()[::10, ::10].A
array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ...,  0.,  0.,  0.]])