colour.utilities.index_along_last_axis¶
- colour.utilities.index_along_last_axis(a: ArrayLike, indexes: ArrayLike) numpy.ndarray [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. , 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. , 1.7], ... [6.7, 8.2, 1.7], ... [1.2, 7.1, 1.4]], ... [[4. , 4.8, 8.9], ... [4. , 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]])