Numpy indexed operations
This package contains functionality for indexed operations on numpy ndarrays, providing efficient vectorized functionality such as grouping and set operations.
Rich and efficient grouping functionality:
splitting of values by key-group
reductions of values by key-group
Generalization of existing array set operation to nd-arrays, such as:
unique
union
difference
exclusive (xor)
contains / in (in1d)
Some new functions:
indices: numpy equivalent of list.index
count: numpy equivalent of collections.Counter
mode: find the most frequently occuring items in a set
multiplicity: number of occurrences of each key in a sequence
count_table: like R’s table or pandas crosstab, or an ndim version of np.bincount
Some brief examples to give an impression hereof:
# three sets of graph edges (doublet of ints)
edges = np.random.randint(0, 9, (3, 100, 2))
# find graph edges exclusive to one of three sets
ex = exclusive(*edges)
print(ex)
# which edges are exclusive to the first set?
print(contains(edges[0], ex))
# where are the exclusive edges relative to the totality of them?
print(indices(union(*edges), ex))
# group and reduce values by identical keys
values = np.random.rand(100, 20)
# and so on...
print(group_by(edges[0]).median(values))
Installation
> conda install numpy-indexed -c conda-forge
or
> pip install numpy-indexed
Design decisions:
This package builds upon a generalization of the design pattern as can be found in numpy.unique. That is, by argsorting an ndarray, many subsequent operations can be implemented efficiently and in a vectorized manner.
The sorting and related low level operations are encapsulated into a hierarchy of Index classes, which allows for efficient lookup of many properties for a variety of different key-types. The public API of this package is a quite thin wrapper around these Index objects.
The two complex key types currently supported, beyond standard sequences of sortable primitive types, are ndarray keys (i.e, finding unique rows/columns of an array) and composite keys (zipped sequences). For the exact casting rules describing valid sequences of key objects to index objects, see as_index().
Todo and open questions:
There may be further generalizations that could be built on top of these abstractions. merge/join functionality perhaps?
Metadata
Release files for numpy-indexed-fedeful 0.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| numpy-indexed-fedeful-0.0.0.tar.gz | 21.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| numpy_indexed_fedeful-0.0.0-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 41.3 kB
Release files / numpy-indexed-fedeful-0.0.0.tar.gz
| Download URL | numpy-indexed-fedeful-0.0.0.tar.gz |
|---|---|
| Size | 21.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2f0eaec484cf9d46137279cd236026a6f478dbb992a14bcfb44a92a28350690
|
|
BLAKE2b-256 checksum How to use checksums |
5106eb9ac65276e933a7283655566618198bf0de377a87dc30af6f452dd6b3d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|
Release files / numpy_indexed_fedeful-0.0.0-py2.py3-none-any.whl
| Download URL | numpy_indexed_fedeful-0.0.0-py2.py3-none-any.whl |
|---|---|
| Size | 19.8 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
16c26e81cdaf2726703f0e00a0a681211e394e2ec027a740534b8ce5159233ad
|
|
BLAKE2b-256 checksum How to use checksums |
0788363cbc373ec08149a592d5401f1a4ec8289554530dceaa8928c6353a1a17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.11.1
|