PyRSB
librsb is a high performance sparse matrix library implementing the Recursive Sparse Blocks format, which is especially well suited for multiplications in iterative methods on huge symmetric 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 no overhead, see the advanced example.
So far, PyRSB is a prototype tested on Linux only. The librsb library offers much more, and can make PyRSB much more powerful. Prospective users and collaborators feedback are sought; please contact me to feedback and help.
Features
The following functionality is implemented:
- Initialization with
rsb.rsb_matrix()styled asscipy.sparse.csr_matrix(). - Conversion from
scipy.sparse.csr_matrix(). - Multiplication by vector/multivector.
- Rows/columns through
nr=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.rsb_file_mtx_load(bytes(filename,encoding='utf-8'))
Build and Use
- If you have librsb installed:
makeshall build and test. - Make sure you have
cython,scipy,numpy. installed. - If 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 check librsb's web site. - If you want the
Makefileto build librsb (in this directory):make all-localwill attempt downloading librsb-1.2.0.9 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. 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
"""
import numpy
import scipy
from scipy.sparse import csr_matrix
from rsb import rsb_matrix, rsb_dtype
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 example
print(a)
a = rsb_matrix((4, 4))
a = rsb_matrix(c,dtype=rsb_dtype)
nrhs = 1 # set to nrhs>1 to multiply by multiple vectors at once
nr = 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.0
y[:, :] = 0.0
print(a)
print(x)
print(y)
# import rsb # import operators
# a.autotune() # makes only sense for large matrices
y = y + a * x
# equivalent to y=y+c*x
print(y)
del a
Example Advanced Usage
# Example: demo2.py
"""
pyrsb demo
"""
import numpy
import scipy
from scipy.sparse import csr_matrix
from rsb import rsb_matrix, rsb_dtype
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 once
nr = 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.0
y[:, :] = 0.0
print(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,0,1,2.0,ord('N'),1.0,nrhs,ord('F'),1.0,False)
# Inefficient: reallocate y
y = y + a * x
# Inefficient: reallocate y
y += a * x
# Equivalent but more efficient: don't reallocate y
a._spmm(x,y)
print(y)
del a
License
GPLv3+
Release files for pyrsb 0.2.20210226
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyrsb-0.2.20210226.tar.gz | 200.6 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pyrsb-0.2.20210226-cp39-cp39-manylinux2010_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.12+ x86-64 | Details |
| pyrsb-0.2.20210226-cp38-cp38-manylinux2010_x86_64.whl | CPython 3.8 | CPython 3.8 | Linux glibc 2.12+ x86-64 | Details |
| pyrsb-0.2.20210226-cp37-cp37m-manylinux2010_x86_64.whl | CPython 3.7 | CPython 3.7 pymalloc | Linux glibc 2.12+ x86-64 | Details |
| pyrsb-0.2.20210226-cp36-cp36m-manylinux2010_x86_64.whl | CPython 3.6 | CPython 3.6 pymalloc | Linux glibc 2.12+ x86-64 | Details |
Total release size: 14.8 MB
Release files / pyrsb-0.2.20210226.tar.gz
| Download URL | pyrsb-0.2.20210226.tar.gz |
|---|---|
| Size | 200.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2bb9053ff3b69ac8e251115abe0587a4852b4ed6e0203eac74083a2d8c12318b
|
|
BLAKE2b-256 checksum How to use checksums |
3f4d07b0c3422ed7a3d23525bcbd66323cbb7ccc1c3b386709c6f6f2d19b0986
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
|
Release files / pyrsb-0.2.20210226-cp39-cp39-manylinux2010_x86_64.whl
| Download URL | pyrsb-0.2.20210226-cp39-cp39-manylinux2010_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.9 Linux glibc 2.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
9d114b1df3f5424455aeec17149dbb81d5c78f8c7ce63963ef32445a8d2fb34a
|
|
BLAKE2b-256 checksum How to use checksums |
cc4eec38979cebc8f94dd8db3133113ddcdc9e345414e389339347719fc72b8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
|
Release files / pyrsb-0.2.20210226-cp38-cp38-manylinux2010_x86_64.whl
| Download URL | pyrsb-0.2.20210226-cp38-cp38-manylinux2010_x86_64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.8 Linux glibc 2.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
bd46b9506ab0ffa87852696b1711d28e7264bf77a0fdd22fdbaf4601d5c1c5b3
|
|
BLAKE2b-256 checksum How to use checksums |
99562abad30385fa6e2ddcaf963d6e22e54d864d64e6ef19d36049ff1be0b4a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
|
Release files / pyrsb-0.2.20210226-cp37-cp37m-manylinux2010_x86_64.whl
| Download URL | pyrsb-0.2.20210226-cp37-cp37m-manylinux2010_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f54464a4df4d56f4fbbd6a5fd9e9a28bc6ed016de66875c4b1586307da47832b
|
|
BLAKE2b-256 checksum How to use checksums |
20f3455164ce3923b678824056a7b0a6f4cecacf5da4d3ce76a083b0245b0eb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
|
Release files / pyrsb-0.2.20210226-cp36-cp36m-manylinux2010_x86_64.whl
| Download URL | pyrsb-0.2.20210226-cp36-cp36m-manylinux2010_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
08c69724883d631e87fad4bfa1fc19d9c1348f9a822b4700b574f7d64da1552b
|
|
BLAKE2b-256 checksum How to use checksums |
d5f736de04174ab300e736c89fc6ef8b3f75eca8b2461ff6941e839d1e7a2151
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
|