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
npstructures-0.2.19.tar.gz 47.4 kB Details

Built distribution (wheel)

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

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

Release history Release notifications | RSS feed

This release

0.2.19 This release

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

1 release file

0.2.0

2 release files

0.1.0

1 release file

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