Scipy: do sparse matrices support advanced indexing?

No problems:

>>> t = np.array([[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],[5,5,5,5,5]]) >>> x = np.arange(5).reshape((-1,1)); y = np.arange(5) >>> print (t[[x]],t[[y]]) 

A big problem:

 >>> s = scipy.sparse.csr_matrix(t) >>> print (s[[x]].toarray(),s[[y]].toarray()) Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> : : : : ValueError: data, indices, and indptr should be rank 1 

s.toarray()[[x]] works fine, but it hits the whole target with sparse matrices, since my arrays are too large. I checked the attributes and methods associated with some sparse matrices, for anything referring to Advanced Indexing, but without cubes. Any ideas?

+7
source share
1 answer

sparse matrices have very limited indexing support, and accessibility depends on the matrix format.

For example:

 >>> a = scipy.sparse.rand(100,100,format='coo') >>> a[2:5, 6:8] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'coo_matrix' object has no attribute '__getitem__' 

but

 >>> a = scipy.sparse.rand(100,100,format='csc') >>> a[2:5, 6:8] <3x2 sparse matrix of type '<type 'numpy.float64'>' with 0 stored elements in Compressed Sparse Column format> 

although

 >>> a[2:5:2, 6:8:3] Traceback (most recent call last): ... ValueError: slicing with step != 1 not supported 

There is also

 >>> a = scipy.sparse.rand(100,100,format='dok') >>> a[2:5:2, 6:8:3] Traceback (most recent call last): ... NotImplementedError: fancy indexing supported over one axis only >>> a[2:5:2,1] <3x1 sparse matrix of type '<type 'numpy.float64'>' with 0 stored elements in Dictionary Of Keys format> 

And even

 >>> a = scipy.sparse.rand(100,100,format='lil') >>> a[2:5:2,1] <2x1 sparse matrix of type '<type 'numpy.int32'>' with 0 stored elements in LInked List format> C:\Python27\lib\site-packages\scipy\sparse\lil.py:230: SparseEfficiencyWarning: Indexing into a lil_matrix with multiple indices is slow. Pre-converting to CSC or CSR beforehand is more efficient. SparseEfficiencyWarning) >>> a[2:5:2, 6:8:3] <2x1 sparse matrix of type '<type 'numpy.int32'>' with 0 stored elements in LInked List format> 
+11
source

All Articles