I have removed--

_add and _sub. will later implement the same code as in sparse.py but in procedurally

I have added--

_mulscsp for multiplication of a matrix in csr representation by a scaler.

_mulspsp, _mulspsp2, _mulspsp3 are three implementation of mulitplications of sparse matrices. Profile results can be found in [1]

_mulspvec multiplication of sparse matrix by a vector. It is much faster than earlier implementation. [1]

_applyfunc applies the function to all elements of a matrix in csr representation. Takes slightly less function calls than earlier one [1]

I have implemented CSR counterpart to these algorithms because I intend to use CSR representation to store the matrix internally. The reason are-
--CSR takes less space than DOK
--If DOK is needed, like in addition or subtraction or in sparse*sparse, CSRtoDOK conversion is quite fast.
--Code is much simpler to understand and hence less clumsy.

[1] http://sympymatrix.blogspot.in/2013/06/week-25-profiling-of-different.html