'Cast the matrix elements to a specified type.
Parameters
dtype : string or numpy dtype
Typecode or data-type to which to cast the data.
casting : {\'no\', \'equiv\', \'safe\', \'same_kind\', \'unsafe\'}, optional
Controls what kind of data casting may occur.
Defaults to \'unsafe\' for backwards compatibility.
\'no\' means the data types should not be cast at all.
\'equiv\' means only byte-order changes are allowed.
\'safe\' means only casts which can preserve values are allowed.
\'same_kind\' means only safe casts or casts within a kind,
like float64 to float32, are allowed.
\'unsafe\' means any data conversions may be done.
copy : bool, optional
If `copy` is `False`, the result might share some memory with this
matrix. If `copy` is `True`, it is guaranteed that the result and
this matrix do not share any memory.'

def astype(self, dtype, casting='unsafe', copy=True):

    dtype = np.dtype(dtype)
    if (self.dtype != dtype):
        return self.tocsr().astype(dtype, casting=casting, copy=copy).asformat(self.format)
    elif copy:
        return self.copy()
    else:
        return self
