Package: pyrsb
PyRSBlibrsbis ahigh performance sparse matrix
libraryimplementing the Recursive Sparse Blocks format,
which is especially well suited for
multiplications initerative methodsonvery large sparse matrices.PyRSB is a Cython-based Python interface to librsb.On multicore machines, PyRSB can be several times faster than e.g.scipy.sparse.csr_matrix().
For an example how to invoke it with minimal overhead,see the advanced example.So far, PyRSB is a prototype tested on Linux only.
The librsb library instead is mature and well tested.Prospective PyRSB users and collaborators are welcome tocontact me.FeaturesThe following functionality is implemented:Initialization withrsb.rsb_matrix()styled asscipy.sparse.csr_matrix().Conversion fromscipy.sparse.csr_matrix().Multiplication by vector/multivector.Rows/columns throughnr=a.shape()[0]/nr=a.shape()[1], ornr()/nc().find(),find_block(),tril(),triu(),shape(),nnz.print'able.PyRSB-Specific:autotune(),do_print().load from a Matrix Market file, e.g.rsb_matrix(bytes(filename,encoding='utf-8'))Build and UseIf you want theMakefileto build librsb (in this directory):make all-localwill attempt downloading librsb-1.3.0.0 from the
web and building it here before building pyrsb.
If the file is in place, it won't download it a second time.
After that,make local-librsb-pyrsb(ormake lp) will build pyrsb
using local librsb, then run it.
This method shall use the best compilation flags.If you have librsb already installed:makeshall build and test.Make sure you havecython,scipy,numpy. installed.If you don't have librsb installed you may want to try viapippip install pyrsbIf you want to install librsb on Ubuntu or Debian:sudo apt-get install librsb-devshall suffice.
Other operating systems have librsb, too.
Please check yours.
Or checklibrsb's web site.make testwill test benchmark code usingtest.py(to compare speed to SciPy)make bwill also produce graphs (requiresgnuplot)Example Usage# Example: demo1.py"""pyrsb demo"""importnumpyimportscipyfromscipy.sparseimportcsr_matrixfrompyrsbimport*V=[11.0,12.0,22.0]I=[0,0,1]J=[0,1,1]c=csr_matrix((V,(I,J)))print(c)# several constructor forms, as with csr_matrix:a=rsb_matrix((V,(I,J)))a=rsb_matrix((V,(I,J)),[3,3])a=rsb_matrix((V,(I,J)),sym="S")# symmetric exampleprint(a)a=rsb_matrix((4,4))a=rsb_matrix(c)nrhs=1# set to nrhs>1 to multiply by multiple vectors at oncenr=a.shape[0]nc=a.shape[1]order="F"x=numpy.empty([nc,nrhs],dtype=rsb_dtype,order=order)y=numpy.empty([nr,nrhs],dtype=rsb_dtype,order=order)x[:,:]=1.0y[:,:]=0.0print(a)print(x)print(y)# import rsb # import operators# a.autotune() # makes only sense for large matricesy=y+a*x# equivalent to y=y+c*xprint(y)delaExample Advanced Usage# Example: demo2.py"""pyrsb demo"""importnumpyimportscipyfromscipy.sparseimportcsr_matrixfrompyrsbimport*V=[11.0,12.0,22.0]I=[0,0,1]J=[0,1,1]a=rsb_matrix((V,(I,J)))nrhs=4# set to nrhs>1 to multiply by multiple vectors at oncenr=a.shape[0]nc=a.shape[1]# Choose Fortran or "by columns" order here.order="F"x=numpy.empty([nc,nrhs],dtype=rsb_dtype,order=order)y=numpy.empty([nr,nrhs],dtype=rsb_dtype,order=order)x[:,:]=1.0y[:,:]=0.0print(a)print(x)print(y)# Autotuning example: use it if you need many multiplication iterations on huge matrices (>>1e6 nonzeroes).# Here general (nrhs=1) case:a.autotune()# Here with all the autotuning parameters specified:a.autotune(1.0,1,2.0,'N',1.0,nrhs,'F',1.0,False)# Inefficient: reallocate yy=y+a*x# Inefficient: reallocate yy+=a*x# Equivalent but more efficient: don't reallocate ya._spmm(x,y)print(y)delaLicenseGPLv3+