argsort¶
argsort : argmax, argmin and argsort for array_like and Python iterables.
This module was written by Matthias Cuntz while at Department of Computational Hydrosystems, Helmholtz Centre for Environmental Research - UFZ, Leipzig, Germany, and continued while at Institut National de Recherche pour l’Agriculture, l’Alimentation et l’Environnement (INRAE), Nancy, France.
Copyright (c) 2014-2020 Matthias Cuntz - mc (at) macu (dot) de Released under the MIT License; see LICENSE file for details.
Written Dec 2014 by Matthias Cuntz (mc (at) macu (dot) de)
Added argmin, argmax, Jul 2019, Matthias Cuntz
Using numpy docstring format, extending examples from numpy docstrings, May 2020, Matthias Cuntz
The following functions are provided
|
Wrapper for numpy.argmax, numpy.ma.argmax, and using max for Python iterables. |
|
Wrapper for numpy.argmin, numpy.ma.argmin, and using min for Python iterables. |
|
Wrapper for numpy.argsort, numpy.ma.argsort, and using sorted for Python iterables. |
- argmax(a, *args, **kwargs)[source]¶
Wrapper for numpy.argmax, numpy.ma.argmax, and using max for Python iterables.
Passes all keywords directly to the individual routines, i.e.
numpy.argmax(a, axis=None, out=None)
numpy.ma.argmax(self, axis=None, fill_value=None, out=None)
No keyword will be passed to max routine for Python iterables.
- Parameters
a (array_like) – input array, masked array, or Python iterable
*args (optional) – all arguments of numpy.argmax or numpy.ma.argmax
**kwargs (optional) – all keyword arguments of numpy.argmax or numpy.ma.argmax
- Returns
index_array – Array of indices of the largest element in input array a. It has the same shape as a.shape with the dimension along axis removed. a[np.unravel_index(argmax(a), a.shape)] is the maximum value of a.
- Return type
ndarray, int
Examples
>>> import numpy as np
# One-dimensional array >>> a = np.array([0,4,6,2,1,5,3,5]) >>> ii = argmax(a) >>> print(ii) 2 >>> print(a[ii]) 6
# One-dimensional masked array >>> a = np.ma.array([0,4,6,2,1,5,3,5], mask=[0,0,1,1,0,0,0,0]) >>> ii = argmax(a) >>> print(ii) 5 >>> print(a[ii]) 5 >>> ii = argmax(a, fill_value=6) >>> print(ii) 2
# List >>> a = [0,4,6,2,1,5,3,5] >>> ii = argmax(a) >>> print(ii) 2 >>> print(a[ii]) 6
>>> # from numpy.argmax docstring >>> a = np.arange(6).reshape(2,3) + 10 >>> a array([[10, 11, 12], [13, 14, 15]]) >>> np.argmax(a) 5 >>> np.argmax(a, axis=0) array([1, 1, 1]) >>> np.argmax(a, axis=1) array([2, 2])
# Indexes of the maximal elements of a N-dimensional array: >>> ind = np.unravel_index(np.argmax(a, axis=None), a.shape) >>> ind (1, 2) >>> a[ind] 15
>>> b = np.arange(6) >>> b[1] = 5 >>> b array([0, 5, 2, 3, 4, 5]) >>> np.argmax(b) # Only the first occurrence is returned. 1
Notes
argmax for iterables was taken from https://stackoverflow.com/questions/16945518/finding-the-index-of-the-value-which-is-the-min-or-max-in-python
- argmin(a, *args, **kwargs)[source]¶
Wrapper for numpy.argmin, numpy.ma.argmin, and using min for Python iterables.
- Passes all keywords directly to the individual routines, i.e.
numpy.argmin(a, axis=None, out=None)
numpy.ma.argmin(self, axis=None, fill_value=None, out=None)
No keyword will be passed to min routine for Python iterables.
- Parameters
a (array_like) – input array, masked array, or Python iterable
*args (optional) – all arguments of numpy.argmin or numpy.ma.argmin
**kwargs (optional) – all keyword arguments of numpy.argmin or numpy.ma.argmin
- Returns
index_array – Array of indices of the largest element in input array a. It has the same shape as a.shape with the dimension along axis removed. a[np.unravel_index(argmin(a), a.shape)] is the minimum value of a.
- Return type
ndarray, int
Examples
>>> import numpy as np
# One-dimensional array >>> a = np.array([0,4,6,2,1,5,3,5]) >>> ii = argmin(a) >>> print(ii) 0 >>> print(a[ii]) 0
# One-dimensional masked array >>> a = np.ma.array([0,4,6,2,1,5,3,5], mask=[1,0,1,1,0,0,0,0]) >>> ii = argmin(a) >>> print(ii) 4 >>> print(a[ii]) 1 >>> ii = argmin(a, fill_value=1) >>> print(ii) 0
# List >>> a = [0,4,6,2,1,5,3,5] >>> ii = argmin(a) >>> print(ii) 0 >>> print(a[ii]) 0
>>> # from numpy.argmin docstring >>> a = np.arange(6).reshape(2,3) + 10 >>> a array([[10, 11, 12], [13, 14, 15]]) >>> np.argmin(a) 0 >>> np.argmin(a, axis=0) array([0, 0, 0]) >>> np.argmin(a, axis=1) array([0, 0])
# Indices of the minimum elements of a N-dimensional array: >>> ind = np.unravel_index(np.argmin(a, axis=None), a.shape) >>> ind (0, 0) >>> a[ind] 10
>>> b = np.arange(6) + 10 >>> b[4] = 10 >>> b array([10, 11, 12, 13, 10, 15]) >>> np.argmin(b) # Only the first occurrence is returned. 0
Notes
argmin for iterables was taken from https://stackoverflow.com/questions/16945518/finding-the-index-of-the-value-which-is-the-min-or-max-in-python
- argsort(a, *args, **kwargs)[source]¶
Wrapper for numpy.argsort, numpy.ma.argsort, and using sorted for Python iterables.
- Passes all keywords directly to the individual routines, i.e.
numpy.argsort(a, axis=-1, kind=’quicksort’, order=None) numpy.ma.argsort(a, axis=None, kind=’quicksort’, order=None, fill_value=None) sorted(iterable[, cmp[, key[, reverse]]])
Only key cannot be given for Python iterables because the input array is used as key in the sorted function.
- Parameters
a (array_like) – input array, masked array, or Python iterable
*args (optional) – all arguments of numpy.argsort, numpy.ma.argsort, and sorted (except key argument)
**kwargs (optional) – all keyword arguments of numpy.argsort, numpy.ma.argsort, and sorted (except key argument)
- Returns
index_array – Array of indices that sort a along the specified axis. If a is one-dimensional,
a[index_array]
yields a sorted a.- Return type
ndarray, int
Examples
>>> import numpy as np
# 1D array >>> a = np.array([0,4,6,2,1,5,3,5]) >>> ii = argsort(a) >>> print(a[ii]) [0 1 2 3 4 5 5 6]
>>> ii = argsort(a, kind='quicksort') >>> print(a[ii]) [0 1 2 3 4 5 5 6]
# 1D masked array >>> a = np.ma.array([0,4,6,2,1,5,3,5], mask=[0,0,1,1,0,0,0,0]) >>> ii = argsort(a) >>> print(a[ii]) [0 1 3 4 5 5 – –]
>>> ii = argsort(a, fill_value=1) >>> print(a[ii]) [0 -- -- 1 3 4 5 5]
# list >>> a = [0,4,6,2,1,5,3,5] >>> ii = argsort(a) >>> b = [ a[i] for i in ii ] >>> print(b) [0, 1, 2, 3, 4, 5, 5, 6]
>>> a = [0,4,6,2,1,5,3,5] >>> ii = argsort(a, reverse=True) >>> b = [ a[i] for i in ii ] >>> print(b) [6, 5, 5, 4, 3, 2, 1, 0]
# from numpy.argsort docstring # One-dimensional array: >>> x = np.array([3, 1, 2]) >>> np.argsort(x) array([1, 2, 0])
>>> # Two-dimensional array: >>> x = np.array([[0, 3], [2, 2]]) >>> x array([[0, 3], [2, 2]]) >>> ind = np.argsort(x, axis=0) # sorts along first axis (down) >>> ind array([[0, 1], [1, 0]]) >>> np.take_along_axis(x, ind, axis=0) # same as np.sort(x, axis=0) array([[0, 2], [2, 3]]) >>> ind = np.argsort(x, axis=1) # sorts along last axis (across) >>> ind array([[0, 1], [0, 1]]) >>> np.take_along_axis(x, ind, axis=1) # same as np.sort(x, axis=1) array([[0, 3], [2, 2]])
# Indices of the sorted elements of a N-dimensional array: >>> ind = np.unravel_index(np.argsort(x, axis=None), x.shape) >>> ind (array([0, 1, 1, 0]), array([0, 0, 1, 1])) >>> x[ind] # same as np.sort(x, axis=None) array([0, 2, 2, 3])
>>> # Sorting with keys: >>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')]) >>> x array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')]) >>> np.argsort(x, order=('x','y')) array([1, 0]) >>> np.argsort(x, order=('y','x')) array([0, 1])