ndindex 1.10.0


pip install ndindex

  Latest version

Released: May 21, 2025

Project Links

Meta
Author: Quansight Labs
Requires Python: >=3.9

Classifiers

Programming Language
  • Python :: 3

Operating System
  • OS Independent

ndindex

ndindex logo

A Python library for manipulating indices of ndarrays.

The documentation for ndindex can be found at https://quansight-labs.github.io/ndindex/

ndindex is a library that allows representing and manipulating objects that can be valid indices to numpy arrays, i.e., slices, integers, ellipses, None, integer and boolean arrays, and tuples thereof. The goals of the library are

  • Provide a uniform API to manipulate these objects. Unlike the standard index objects themselves like slice, int, and tuple, which do not share any methods in common related to being indices, ndindex classes can all be manipulated uniformly. For example, idx.args always gives the arguments used to construct idx.

  • Give 100% correct semantics as defined by numpy's ndarray. This means that ndindex will not make a transformation on an index object unless it is correct for all possible input array shapes. The only exception to this rule is that ndindex assumes that any given index will not raise IndexError (for instance, from an out of bounds integer index or from too few dimensions). For those operations where the array shape is known, there is a reduce() method to reduce an index to a simpler index that is equivalent for the given shape.

  • Enable useful transformation and manipulation functions on index objects.

Examples

Canonicalize a slice (over a given shape, or independent of array shape)

>>> from ndindex import *
>>> Slice(-2, 10, 3).reduce()
Slice(-2, 10, 2)
>>> Slice(-2, 10, 3).reduce(5)
Slice(3, 4, 1)

Compute the maximum length of a sliced axis

>>> import numpy as np
>>> len(Slice(2, 10, 3))
3
>>> len(np.arange(10)[2:10:3])
3

Compute the shape of an array of shape (10, 20) indexed by [0, 0:10]

>>> Tuple(0, slice(0, 10)).newshape((10, 20))
(10,)
>>> np.ones((10, 20))[0, 0:10].shape
(10,)

Check if an indexed array would be empty

>>> Tuple(0, ..., Slice(10, 20)).isempty((3, 4, 5))
True
>>> np.ones((3, 4, 5))[0,...,10:20]
array([], shape=(4, 0), dtype=float64)

See the documentation for full details on what ndindex can do.

License

MIT License

Acknowledgments

ndindex development is supported by Quansight Labs and is sponsored in part by the D. E. Shaw group. The D. E. Shaw group collaborates with Quansight on numerous open source projects, including Numba, Dask and Project Jupyter.

https://labs.quansight.org/ https://www.deshaw.com

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython (additional flags: t) 3.13 PyPy 3.9 (pp73) PyPy 3.10 (pp73) PyPy 3.11 (pp73)
macosx_10_13_x86_64
macosx_10_15_x86_64
macosx_10_9_x86_64
macosx_11_0_arm64
manylinux2010_i686
manylinux2010_x86_64
manylinux2014_i686
manylinux2014_x86_64
manylinux_2_12_i686
manylinux_2_12_x86_64
manylinux_2_17_i686
manylinux_2_17_x86_64
musllinux_1_2_i686
musllinux_1_2_x86_64
win32
win_amd64

Files in release

ndindex-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl (158.5KiB)
ndindex-1.10.0-cp310-cp310-macosx_11_0_arm64.whl (157.8KiB)
ndindex-1.10.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (470.9KiB)
ndindex-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8KiB)
ndindex-1.10.0-cp310-cp310-musllinux_1_2_i686.whl (1.5MiB)
ndindex-1.10.0-cp310-cp310-musllinux_1_2_x86_64.whl (1.5MiB)
ndindex-1.10.0-cp310-cp310-win32.whl (145.6KiB)
ndindex-1.10.0-cp310-cp310-win_amd64.whl (152.9KiB)
ndindex-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl (158.7KiB)
ndindex-1.10.0-cp311-cp311-macosx_11_0_arm64.whl (158.0KiB)
ndindex-1.10.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (492.7KiB)
ndindex-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (515.8KiB)
ndindex-1.10.0-cp311-cp311-musllinux_1_2_i686.whl (1.6MiB)
ndindex-1.10.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.5MiB)
ndindex-1.10.0-cp311-cp311-win32.whl (145.5KiB)
ndindex-1.10.0-cp311-cp311-win_amd64.whl (153.0KiB)
ndindex-1.10.0-cp312-cp312-macosx_10_13_x86_64.whl (159.1KiB)
ndindex-1.10.0-cp312-cp312-macosx_11_0_arm64.whl (157.8KiB)
ndindex-1.10.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (509.3KiB)
ndindex-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (533.4KiB)
ndindex-1.10.0-cp312-cp312-musllinux_1_2_i686.whl (1.6MiB)
ndindex-1.10.0-cp312-cp312-musllinux_1_2_x86_64.whl (1.5MiB)
ndindex-1.10.0-cp312-cp312-win32.whl (145.6KiB)
ndindex-1.10.0-cp312-cp312-win_amd64.whl (153.3KiB)
ndindex-1.10.0-cp313-cp313-macosx_10_13_x86_64.whl (157.4KiB)
ndindex-1.10.0-cp313-cp313-macosx_11_0_arm64.whl (156.2KiB)
ndindex-1.10.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (490.7KiB)
ndindex-1.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (514.6KiB)
ndindex-1.10.0-cp313-cp313-musllinux_1_2_i686.whl (1.6MiB)
ndindex-1.10.0-cp313-cp313-musllinux_1_2_x86_64.whl (1.5MiB)
ndindex-1.10.0-cp313-cp313-win32.whl (145.1KiB)
ndindex-1.10.0-cp313-cp313-win_amd64.whl (152.5KiB)
ndindex-1.10.0-cp313-cp313t-macosx_10_13_x86_64.whl (163.3KiB)
ndindex-1.10.0-cp313-cp313t-macosx_11_0_arm64.whl (163.4KiB)
ndindex-1.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (594.0KiB)
ndindex-1.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl (1.6MiB)
ndindex-1.10.0-cp313-cp313t-win32.whl (154.1KiB)
ndindex-1.10.0-cp313-cp313t-win_amd64.whl (162.2KiB)
ndindex-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl (160.1KiB)
ndindex-1.10.0-cp39-cp39-macosx_11_0_arm64.whl (159.2KiB)
ndindex-1.10.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (478.2KiB)
ndindex-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (498.1KiB)
ndindex-1.10.0-cp39-cp39-musllinux_1_2_i686.whl (1.6MiB)
ndindex-1.10.0-cp39-cp39-musllinux_1_2_x86_64.whl (1.5MiB)
ndindex-1.10.0-cp39-cp39-win32.whl (146.4KiB)
ndindex-1.10.0-cp39-cp39-win_amd64.whl (153.9KiB)
ndindex-1.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (143.2KiB)
ndindex-1.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (142.7KiB)
ndindex-1.10.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (159.2KiB)
ndindex-1.10.0-pp310-pypy310_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.4KiB)
ndindex-1.10.0-pp310-pypy310_pp73-win_amd64.whl (144.6KiB)
ndindex-1.10.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (143.5KiB)
ndindex-1.10.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl (143.0KiB)
ndindex-1.10.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (160.0KiB)
ndindex-1.10.0-pp311-pypy311_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.9KiB)
ndindex-1.10.0-pp311-pypy311_pp73-win_amd64.whl (144.3KiB)
ndindex-1.10.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (143.0KiB)
ndindex-1.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (142.6KiB)
ndindex-1.10.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (159.0KiB)
ndindex-1.10.0-pp39-pypy39_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156.1KiB)
ndindex-1.10.0-pp39-pypy39_pp73-win_amd64.whl (144.5KiB)
ndindex-1.10.0.tar.gz (252.6KiB)
Extras:
Dependencies: