Skip to main content

Numpy Structures

https://img.shields.io/pypi/v/npstructures.svg https://github.com/knutdrand/npstructures/actions/workflows/python-install-and-test.yml/badge.svg Documentation Status

Simple data structures that augments the numpy library

Features

The main feature is the RaggedArray class which enables numpy-like behaviour and performance for arrays where the length of the rows differ.

RaggedArray is meant as a drop-in replacement for numpy when you have arrays with differing row lengths. As such, familiarity with numpy is assumed. The simplest way to construct a RaggedArray is from a list of lists:

>>> from npstructures import RaggedArray
>>> ra = RaggedArray([[1, 2], [4, 1, 3, 7], [9], [8, 7, 3, 4]])

A RaggedArray can be indexed much like a numpy array:

>>> ra[1]
array([4, 1, 3, 7])
>>> ra[1, 3]
7
>>> ra[1:3]
RaggedArray([[4, 1, 3, 7], [9]])
>>> ra[[0, 3]]
RaggedArray([[1, 2], [8, 7, 3, 4]])
>>> ra[0] = [0, 0]
>>> ra
RaggedArray([[0, 0], [4, 1, 3, 7], [9], [8, 7, 3, 4]])
>>> ra[1:3] = [[10], [20]]
>>> ra
RaggedArray([[0, 0], [10, 10, 10, 10], [20], [8, 7, 3, 4]])
>>> ra[[0, 2, 3]] = RaggedArray([[2, 2], [3], [5, 5, 5, 5]])
>>> ra
RaggedArray([[2, 2], [10, 10, 10, 10], [3], [5, 5, 5, 5]])

numpy ufuncs can be applied to RaggedArray objects:

>>> ra + 1
RaggedArray([[2, 3], [5, 2, 4, 8], [10], [9, 8, 4, 5]])
>>> ra*2
RaggedArray([[2, 4], [8, 2, 6, 14], [18], [16, 14, 6, 8]])
>>> ra + [[1], [10], [100], [1000]]
RaggedArray([[2, 3], [14, 11, 13, 17], [109], [1008, 1007, 1003, 1004]])
>>> ra - (ra*2)
RaggedArray([[-1, -2], [-4, -1, -3, -7], [-9], [-8, -7, -3, -4]])

Some numpy functions can be applied to RaggedArray objects:

>>> import numpy as np
>>> ra = RaggedArray([[1, 2], [4, 1, 3, 7], [9], [8, 7, 3, 4]])
>>> np.concatenate((ra, ra*10))
RaggedArray([[1, 2], [4, 1, 3, 7], [9], [8, 7, 3, 4], [10, 20], [40, 10, 30, 70], [90], [80, 70, 30, 40]])
>>> np.nonzero(ra>3)
(array([1, 1, 2, 3, 3, 3]), array([0, 3, 0, 0, 1, 3]))
>>> np.ones_like(ra)
RaggedArray([[1, 1], [1, 1, 1, 1], [1], [1, 1, 1, 1]])

In addition to this. HashTable and Counter provides simple dict-like behaviour for numpy arrays:

HashTable can be used for dict-like functionality of numpy arrays. The simplest way to construct a HashTable is from an array of keys and an array of values (note that the set of keys cannot be modified after the initialization of the object):

>>> table = HashTable([11, 113, 1191, 11199], [2, 3, 5, 7])
>>> table[11]
array([2])
>>> table[[113, 11199]]
array([3, 7])
>>> table[11]=1000
>>> table
HashTable([  113  1191    11 11199], [   3    5 1000    7])
>>> table[[113, 1191]]=2000
>>> table
HashTable([  113  1191    11 11199], [2000 2000 1000    7])
>>> table[[113, 1191, 11, 11191]] = [1, 2, 3, 4]
>>> table[[113, 1191, 11, 11199]] = [1, 2, 3, 4]
>>> table
HashTable([  113  1191    11 11199], [1 2 3 4])

Counter objects supports counting the occurances of a predefined set of keys in a set of samples. For instance, to count the occurances of 3 and 1 in the list [3, 2, 1, 3, 4, 1, 1]:

>>> from npstructures import Counter
>>> counter = Counter([3, 1])
>>> counter.count([3, 2, 1, 3, 4, 1, 1])
>>> counter
Counter([3 1], [2 3])

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.2.0 (2022-06-17)

  • Tested indexing, ufuncs and arrayfunctions with hypothesis

0.1.0 (2021-12-27)

  • First release on PyPI.

Metadata

Release files for npstructures 0.2.19

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for npstructures 0.2.19
File Size Uploaded Provenance Actions
npstructures-0.2.19.tar.gz 47.4 kB Without provenance Details for npstructures-0.2.19.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for npstructures 0.2.19
File Interpreter ABI Platform Actions
npstructures-0.2.19-py2.py3-none-any.whl Python 2, Python 3 none any Details for npstructures-0.2.19-py2.py3-none-any.whl

Total release size: 83.7 kB

Release files / npstructures-0.2.19.tar.gz

Download URL npstructures-0.2.19.tar.gz
Size 47.4 kB
Tags Source
SHA-256 checksum
How to use checksums
8091ff5f6e3f0bef8f8c847a95d784366762bc4426616c02381a071228b9b7fb
BLAKE2b-256 checksum
How to use checksums
f572e2574d0f865879218cbc40a018c4935bb4475c5a8a14b96fd3de21092c5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / npstructures-0.2.19-py2.py3-none-any.whl

Download URL npstructures-0.2.19-py2.py3-none-any.whl
Size 36.4 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
0d833606978cfd5b01b5fb3b74bb9896a53a1e1f82d4b5cc09def1920e41fdbd
BLAKE2b-256 checksum
How to use checksums
2a6bfdbd754e75c16c1da91f159170d2b25e9028f21bbc5d2102028b9912cefb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.3

Security for npstructures 0.2.19

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page