Scipy: ¿Las matrices dispersas son compatibles con la indexación avanzada?

No hay problema:

>>> 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]]) 

Gran problema:

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

s.toarray()[[x]] funciona muy bien, pero s.toarray()[[x]] todo el propósito de usar matrices dispersas ya que mis arreglos son demasiado grandes. He revisado los atributos y métodos asociados con algunas de las matrices dispersas para cualquier cosa que haga referencia a la indexación avanzada, pero no a los dados. ¿Algunas ideas?

Las matrices dispersas tienen un soporte de indexación muy limitado, y lo que está disponible depende del formato de la matriz.

Por ejemplo:

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

pero

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

a pesar de que

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

También hay

 >>> 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 '' with 0 stored elements in Dictionary Of Keys format> 

E incluso

 >>> a = scipy.sparse.rand(100,100,format='lil') >>> a[2:5:2,1] <2x1 sparse matrix of type '' 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 '' with 0 stored elements in LInked List format>