Skip to main content

Sparse convolution in python using Toeplitz convolution matrix multiplication.

Project description

sparse_convolution

Sparse convolution in python.
Uses Toeplitz convolutional matrix multiplication to perform sparse convolution.
This allows for extremely fast convolution when:

  • The kernel is small (<= 100x100)
  • The input array is sparse (<= 1% density)
  • The input array is small (<= 1000x1000)
  • Many arrays are convolved with the same kernel (large batch size >= 1000)

Install:

The package is available on PyPI.
pip install sparse_convolution


Alternatively, you can install from source.
git clone https://github.com/RichieHakim/sparse_convolution
cd sparse_convolution
pip install -e .

Basic usage:

Convolve a single sparse 2D array with a 2D kernel.

import sparse_convolution as sc
import numpy as np
import scipy.sparse

# Create a single sparse matrix
A = scipy.sparse.rand(100, 100, density=0.1)

# Create a dense kernel
B = np.random.rand(3, 3)

# Prepare class
conv = sc.Toeplitz_convolution2d(
    x_shape=A.shape,
    k=B,
    mode='same',
    dtype=np.float32,
)

# Convolve
C = conv(
    x=A,
    batching=False,
).toarray()

Batching usage:

Convolve multiple sparse 2D arrays with a 2D kernel.
The input arrays must be reshaped into flattened vectors and stacked into a single sparse array of shape: (n_arrays, height * width).

import sparse_convolution as sc
import numpy as np
import scipy.sparse

# Create multiple sparse matrices
# note that the shape of A will be (3, 100**2)
A = scipy.sparse.vstack([
    scipy.sparse.rand(100, 100, density=0.1).reshape(1, -1),
    scipy.sparse.rand(100, 100, density=0.1).reshape(1, -1),
    scipy.sparse.rand(100, 100, density=0.1).reshape(1, -1),
]).tocsr()

# Create a dense kernel
B = np.random.rand(3, 3)

# Prepare class
conv = sc.Toeplitz_convolution2d(
    x_shape=(100, 100),  # note that the input shape here is (100, 100)
    k=B,
    mode='same',
    dtype=np.float32,
)

# Convolve
C = conv(
    x=A,
    batching=True,
)

# Reshape the output back to (3, 100, 100)
C_reshaped = np.stack([c.reshape(100, 100).toarray() for c in C], axis=0)

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sparse_convolution-0.1.3.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

sparse_convolution-0.1.3-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file sparse_convolution-0.1.3.tar.gz.

File metadata

  • Download URL: sparse_convolution-0.1.3.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for sparse_convolution-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f6e5106802b3aab9fd196f3a69a145649adf61121afbb011d552e67771a93cfc
MD5 38600e4088051fd643796112b12d6283
BLAKE2b-256 c98730a1d79b1c25617713592dd6da4ca02081ee8a219493406a3268dcf6ef03

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparse_convolution-0.1.3.tar.gz:

Publisher: pypi_release.yml on RichieHakim/sparse_convolution

Attestations:

File details

Details for the file sparse_convolution-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for sparse_convolution-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3e578cefaa8ed9be24882dd79005d5b02ffe9b9fead969fc14f01e4bcc95af4b
MD5 68f8a14f7be1394022e85f028d220706
BLAKE2b-256 c5ba7684fbd8ef097396967b75a64e77db233096fafa759b795bded372130b15

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparse_convolution-0.1.3-py3-none-any.whl:

Publisher: pypi_release.yml on RichieHakim/sparse_convolution

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page