type(A) <class 'scipy.sparse.csc.csc_matrix'> A.shape (8529, 60877) print A[0,:]   (0, 25)   1.0   (0, 7422) 1.0   (0, 26062)    1.0   (0, 31804)    1.0   (0, 41602)    1.0   (0, 43791)    1.0 print A[1,:]   (0, 7044) 1.0   (0, 31418)    1.0   (0, 42341)    1.0   (0, 47125)    1.0   (0, 54376)    1.0 print A[:,0]   #nothing returned   Now what I don't understand is that A[1,:] should select elements from the 2nd row, yet I get elements from the 1st row via print A[1,:]. Also, print A[:,0] should return the first column but I get nothing printed. Why?
Explanation: Sparse Matrix is a matrix in which most of the elements are Zero. Identity Matrix is a matrix in which all principle diagonal elements are 1 and rest of the elements are Zero.
S = sparse( A ) converts a full matrix into sparse form by squeezing out any zero elements. If a matrix contains many zeros, converting the matrix to sparse storage saves memory. S = sparse( m,n ) generates an m -by- n all zero sparse matrix.
The function csr_matrix() is used to create a sparse matrix of compressed sparse row format whereas csc_matrix() is used to create a sparse matrix of compressed sparse column format.
A[1,:] is itself a sparse matrix with shape (1, 60877).  This is what you are printing, and it has only one row, so all the row coordinates are 0.
For example:
In [41]: a = csc_matrix([[1, 0, 0, 0], [0, 0, 10, 11], [0, 0, 0, 99]])  In [42]: a.todense() Out[42]:  matrix([[ 1,  0,  0,  0],         [ 0,  0, 10, 11],         [ 0,  0,  0, 99]], dtype=int64)  In [43]: print(a[1, :])   (0, 2)    10   (0, 3)    11  In [44]: print(a)   (0, 0)    1   (1, 2)    10   (1, 3)    11   (2, 3)    99  In [45]: print(a[1, :].toarray()) [[ 0  0 10 11]]   You can select columns, but if there are no nonzero elements in the column, nothing is displayed when it is output with print:    
In [46]: a[:, 3].toarray() Out[46]:  array([[ 0],        [11],        [99]])  In [47]: print(a[:,3])   (1, 0)    11   (2, 0)    99  In [48]: a[:, 1].toarray() Out[48]:  array([[0],        [0],        [0]])  In [49]: print(a[:, 1])   In [50]:   The last print call shows no output because the column a[:, 1] has no nonzero elements.
To answer your title's question using a different technique than your question's details:
csc_matrix gives you the method .nonzero().
Given:
>>> import numpy as np >>> from scipy.sparse.csc import csc_matrix >>>  >>> row = np.array( [0, 1, 3]) >>> col = np.array( [0, 2, 3]) >>> data = np.array([1, 4, 16]) >>> A = csc_matrix((data, (row, col)), shape=(4, 4))   You can access the indices poniting to non-zero data by:
>>> rows, cols = A.nonzero() >>> rows array([0, 1, 3], dtype=int32) >>> cols array([0, 2, 3], dtype=int32)   Which you can then use to access your data, without ever needing to make a dense version of your sparse matrix:
>>> [((i, j), A[i,j]) for i, j in zip(*A.nonzero())] [((0, 0), 1), ((1, 2), 4), ((3, 3), 16)] 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With