Skip to main content

Sparse vectors.

Project description

image image image image image image image image image

Sparse vectors optimized for memory and NumPy integrations.

numpy handles densely populated n-dimemsional arrays. scipy.sparse handles sparsely populated 2-dimensional arrays, i.e., matrices. What's missing from the ecosystem is sparsely populated 1-dimensional arrays, i.e., vectors.

NumPy Python Spector
1-dim bool numpy.array set[int] spector.indices
1-dim float numpy.array dict[int, float] spector.vector
scipy.sparse.dok_matrix dict[int, dict[int, float]] spector.matrix

Indices and vectors are implemented in Cython as hash sets and maps. All native operations are optimized and release the GIL.

  • conversion between sparse numpy arrays
  • conversion between dense numpy arrays
  • binary set operations
  • binary math operations
  • map, filter, and reduce operations with numpy universal functions

Usage

indices

A sparse boolean array with a set interface.

>>> from spector import indices
>>> ind = indices([0, 2])
>>> ind
indices([2 0])
>>> 1 in ind
False
>>> ind.add(1)
True
>>> ind.todense()
array([ True,  True,  True])
>>> ind.fromdense(_)
indices([2 1 0])

vector

A sparse float array with a mapping interface.

>>> from spector import vector
>>> vec = vector({0: 1.0, 2: 2.0, 4: 1.0})
>>> vec
vector([4 2 0], [1. 2. 1.])
>>> vec[2] += 1.0
>>> vec[2]
3.0
>>> vec.todense()
array([1., 0., 3., 0., 1.])
>>> vector.fromdense(_)
vector([4 2 0], [1. 3. 1.])
>>> vec.sum()
5.0
>>> vec + vec
vector([0 2 4], [2. 6. 2.])

Vectors support math operations with scalars, and with vectors if the set method is unambiguous.

vector operation set method ufunc
+ union add
* intersection multiply
- subtract
/ true_divide
** power
| union max
& intersection min
^ symmetric_difference
difference difference

matrix

A mapping of keys to vectors.

>>> from spector import matrix
>>> mat = matrix({0: {1: 2.0}})
>>> mat
matrix(<class 'spector.vector.vector'>, {0: vector([1], [2.])})
>>> mat.row, mat.col, mat.data
(array([0]), array([1]), array([2.]))

Installation

% pip install spector

Tests

100% branch coverage.

% pytest [--cov]

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

spector-1.4.tar.gz (239.9 kB view hashes)

Uploaded Source

Built Distributions

spector-1.4-cp312-cp312-musllinux_1_1_x86_64.whl (2.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

spector-1.4-cp312-cp312-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

spector-1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

spector-1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

spector-1.4-cp312-cp312-macosx_10_9_x86_64.whl (440.4 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

spector-1.4-cp311-cp311-musllinux_1_1_x86_64.whl (2.0 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

spector-1.4-cp311-cp311-musllinux_1_1_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

spector-1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

spector-1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

spector-1.4-cp311-cp311-macosx_10_9_x86_64.whl (441.8 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

spector-1.4-cp310-cp310-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

spector-1.4-cp310-cp310-musllinux_1_1_i686.whl (1.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

spector-1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

spector-1.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

spector-1.4-cp310-cp310-macosx_10_9_x86_64.whl (441.3 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

spector-1.4-cp39-cp39-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

spector-1.4-cp39-cp39-musllinux_1_1_i686.whl (1.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

spector-1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

spector-1.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

spector-1.4-cp39-cp39-macosx_10_9_x86_64.whl (441.5 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

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