To expand the conversion of coo matrix to csr index for indexing, here are some timings for a small sparse matrix
Make matrix
In [158]: M=sparse.coo_matrix([[0,1,2,0,0],[0,0,0,1,0],[0,1,0,0,0]]) In [159]: timeit M[1,2] TypeError: 'coo_matrix' object is not subscriptable In [160]: timeit M.tocsc()[1,2] 1000 loops, best of 3: 375 µs per loop In [161]: timeit M.tocsr()[1,2] 1000 loops, best of 3: 241 µs per loop In [162]: timeit M.todok()[1,2] 10000 loops, best of 3: 65.8 µs per loop In [163]: timeit M.tolil()[1,2] 1000 loops, best of 3: 270 µs per loop
Apparently, to select one dok element, is fast (counting the conversion time). This format is actually a dictionary, which, of course, has quick access to the element.
But if you often refer to entire rows or entire columns or iterate over rows or columns, you need to read the documents more carefully and possibly run your own time tests of typical arrays.
If you set values, and not just read them, the timings and even the implementation may differ. You will get a performance warning if you try to change element 0 the csr or csc .