kwarray.util_misc module

Misc tools that should find a better home

class kwarray.util_misc.FlatIndexer(lens)[source]

Bases: NiceRepr

Creates a flat “view” of a jagged nested indexable object. Only supports one offset level.

Parameters:

lens (List[int]) – a list of the lengths of the nested objects.

Doctest

>>> self = FlatIndexer([1, 2, 3])
>>> len(self)
>>> self.unravel(4)
>>> self.ravel(2, 1)
classmethod fromlist(items)[source]

Convenience method to create a FlatIndexer from the list of items itself instead of the array of lengths.

Parameters:

items (List[list]) – a list of the lists you want to flat index over

Returns:

FlatIndexer

unravel(index)[source]
Parameters:

index (int | List[int]) – raveled index

Returns:

outer and inner indices

Return type:

Tuple[int, int]

Example

>>> import kwarray
>>> rng = kwarray.ensure_rng(0)
>>> items = [rng.rand(rng.randint(0, 10)) for _ in range(10)]
>>> self = kwarray.FlatIndexer.fromlist(items)
>>> index = np.arange(0, len(self))
>>> outer, inner = self.unravel(index)
>>> recon = self.ravel(outer, inner)
>>> # This check is only possible because index is an arange
>>> check1 = np.hstack(list(map(sorted, kwarray.group_indices(outer)[1])))
>>> check2 = np.hstack(kwarray.group_consecutive_indices(inner))
>>> assert np.all(check1 == index)
>>> assert np.all(check2 == index)
>>> assert np.all(index == recon)
ravel(outer, inner)[source]
Parameters:
  • outer – index into outer list

  • inner – index into the list referenced by outer

Returns:

the raveled index

Return type:

List[int]