PyRSB: a Cython-based Python interface to librsb
Project description
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 very 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 to contact me.
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_matrix(bytes(filename,encoding='utf-8'))
Build and Use
- If you want the
Makefile
to build librsb (in this directory):make all-local
will 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. This method shall use the best compilation flags. - If you have librsb already installed:
make
shall build and test. - Make sure you have
cython
,scipy
,numpy
. installed. - If you don't have librsb installed you may want to try via pip
pip install pyrsb
- If you want to install librsb on Ubuntu or Debian:
sudo apt-get install librsb-dev
shall suffice. Other operating systems have librsb, too. Please check yours. Or check librsb's web site. make test
will test benchmark code usingtest.py
(to compare speed to SciPy)make b
will also produce graphs (requiresgnuplot
)
Example Usage
# Example: demo1.py
"""
pyrsb demo
"""
import numpy
import scipy
from scipy.sparse import csr_matrix
from pyrsb import *
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)
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 pyrsb import *
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+
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pyrsb-0.2.20210303-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 208f21c8dc273dfb4702a5fab52736727d4849d5a4d218d1860d7643e55c528c |
|
MD5 | 8dcbfd9290d313a7d9656266f6d7e1f9 |
|
BLAKE2b-256 | e8f043f2a0ad65707986d5e72d7e09e5b8beafa1c01e7d18d33a759e56c6d138 |
Hashes for pyrsb-0.2.20210303-cp39-cp39-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87951745a7e844144a50bc8bcecfcaf01e9044e7513452b3fea18162a8d33cfa |
|
MD5 | 6d071a39235642670d25aa8d0c7852d1 |
|
BLAKE2b-256 | aea30ae440029c96732f7683d558927e3400ebcc2f1bac1fa43abdb0a5a0e1e8 |
Hashes for pyrsb-0.2.20210303-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e382bd1391eac25fb0ba82a7697f139dd24707db7493a4589273aa72a28290b6 |
|
MD5 | cfa73f200df70ff66208370b955558fc |
|
BLAKE2b-256 | 1589e57bd837ae328b71b04626905ad2edbc2565d7e5fed2ef7eed93329e0188 |
Hashes for pyrsb-0.2.20210303-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b444b249230e190ed7534c6c3c4e18581d8e1370ac0b710857cbe5b5b907468 |
|
MD5 | a685f1b8bf63b5d873449dc5e73991d7 |
|
BLAKE2b-256 | d32a4fec33ed19fa2e8c55d4df065f8b20cbc6560cc53f18f9587408caa976e9 |
Hashes for pyrsb-0.2.20210303-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7a5b4cf5d26476cd084ad894e2826179fdc1b9a59f3f89fc5b51c622ea2e684 |
|
MD5 | 21e6587a2b32492d9b712fe3e88f2dcb |
|
BLAKE2b-256 | db00f6942ca9a22765efbc9f05b2a6020d463fdf6044c5715cf0f7c0c7178958 |
Hashes for pyrsb-0.2.20210303-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3856e15bb26bb94546d150e49fe43bd42e1126dbe90952637858a9619a46df5b |
|
MD5 | 1c54d68919e403b6495d5eac004d7c98 |
|
BLAKE2b-256 | 7d8d891691d98dc37ea8c6a465db2d167687faa2963e7ab9f95550261304176e |
Hashes for pyrsb-0.2.20210303-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 113596c9387c46f2d5a00351b04bd8b4e15cbf1ff7a39bea179d8bd6fb4e280e |
|
MD5 | 5da1e050e734b7262ba58ed72282bf06 |
|
BLAKE2b-256 | 18cd5930a08354a2ef014c7d62b87f1fb3f08540844a7eb289e3d1fe1297e940 |
Hashes for pyrsb-0.2.20210303-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53b32cb2bc42c6926272aa4eb85ce0f145f6be568e6890b4484c537669aaee89 |
|
MD5 | 5598397ecb768f7a1b9e077a52ff379a |
|
BLAKE2b-256 | 24e5883a0d85f644f76d8ec374d636312e704cda9fff9425197ff65bcb8988d9 |