Similarly with distarray, does it make sense to pull these sparse specific things out into a separate function, or into sparse.pyx?  Not sure.