colour.utilities.index_along_last_axis#
- colour.utilities.index_along_last_axis(a: ArrayLike, indexes: ArrayLike) ndarray[Any, dtype[_ScalarType_co]] [source]#
Reduce the dimension of array \(a\) by one, by using an array of indexes to pick elements off the last axis.
- Parameters:
a (ArrayLike) – Array \(a\) to be indexed.
indexes (ArrayLike) – integer array with the same shape as a but with one dimension fewer, containing indices to the last dimension of a. All elements must be numbers between 0 and m - 1.
- Returns:
Indexed array \(a\).
- Return type:
- Raises:
ValueError – If the array \(a\) and
indexes
have incompatible shapes.IndexError – If
indexes
has elements outside of the allowed range of 0 to m - 1 or if it’s not an integer array.
Examples
>>> a = np.array( ... [ ... [ ... [0.3, 0.5, 6.9], ... [3.3, 4.4, 1.6], ... [4.4, 7.5, 2.3], ... [2.3, 1.6, 7.4], ... ], ... [ ... [2.0, 5.9, 2.8], ... [6.2, 4.9, 8.6], ... [3.7, 9.7, 7.3], ... [6.3, 4.3, 3.2], ... ], ... [ ... [0.8, 1.9, 0.7], ... [5.6, 4.0, 1.7], ... [6.7, 8.2, 1.7], ... [1.2, 7.1, 1.4], ... ], ... [ ... [4.0, 4.8, 8.9], ... [4.0, 0.3, 6.9], ... [3.5, 7.1, 4.5], ... [1.4, 1.9, 1.6], ... ], ... ] ... ) >>> indexes = np.array([[2, 0, 1, 1], [2, 1, 1, 0], [0, 0, 1, 2], [0, 0, 1, 2]]) >>> index_along_last_axis(a, indexes) array([[ 6.9, 3.3, 7.5, 1.6], [ 2.8, 4.9, 9.7, 6.3], [ 0.8, 5.6, 8.2, 1.4], [ 4. , 4. , 7.1, 1.6]])
This function can be used to compute the result of
np.min()
along the last axis given the correspondingnp.argmin()
indexes.>>> indexes = np.argmin(a, axis=-1) >>> np.array_equal(index_along_last_axis(a, indexes), np.min(a, axis=-1)) True
In particular, this can be used to manipulate the indexes given by functions like
np.min()
before indexing the array. For example, to get elements directly following the smallest elements:>>> index_along_last_axis(a, (indexes + 1) % 3) array([[ 0.5, 3.3, 4.4, 7.4], [ 5.9, 8.6, 9.7, 6.3], [ 0.8, 5.6, 6.7, 7.1], [ 4.8, 6.9, 7.1, 1.9]])