Sorting#
- ivy.argsort(x, /, *, axis=-1, descending=False, stable=True, out=None)[source]#
Return the indices that sort an array
x
along a specified axis.- Parameters:
x (
Union
[Array
,NativeArray
]) – input array.axis (
int
, default:-1
) – axis along which to sort. If set to-1
, the function must sort along the last axis. Default:-1
.descending (
bool
, default:False
) – sort order. IfTrue
, the returned indices sortx
in descending order (by value). IfFalse
, the returned indices sortx
in ascending order (by value). Default:False
.stable (
bool
, default:True
) – sort stability. IfTrue
, the returned indices must maintain the relative order ofx
values which compare as equal. IfFalse
, the returned indices may or may not maintain the relative order ofx
values which compare as equal (i.e., the relative order ofx
values which compare as equal is implementation-dependent). Default:True
.out (
Optional
[Array
], default:None
) – optional output array, for writing the result to. It must have the same shape asx
.
- Return type:
- Returns:
ret – an array of indices. The returned array must have the same shape as
x
. The returned array must have the default array index data type.
This function conforms to the Array API Standard. This docstring is an extension of the docstring in the standard.
Both the description and the type hints above assumes an array input for simplicity, but this function is nestable, and therefore also accepts
ivy.Container
instances in place of any of the argumentsExamples
With
ivy.Array
input:>>> x = ivy.array([3,1,2]) >>> y = ivy.argsort(x) >>> print(y) ivy.array([1,2,0])
>>> x = ivy.array([4,3,8]) >>> y = ivy.argsort(x, descending=True) >>> print(y) ivy.array([2,0,1])
>>> x = ivy.array([[1.5, 3.2], [2.3, 2.3]]) >>> ivy.argsort(x, axis=0, descending=True, stable=False, out=x) >>> print(x) ivy.array([[1, 0], [0, 1]])
>>> x = ivy.array([[[1,3], [3,2]], [[2,4], [2,0]]]) >>> y = ivy.argsort(x, axis=1, descending=False, stable=True) >>> print(y) ivy.array([[[0, 1], [1, 0]], [[0, 1], [1, 0]]])
With
ivy.Container
input:>>> x = ivy.Container(a=ivy.array([5,1,3]), b=ivy.array([[0, 3], [3, 2]])) >>> y = ivy.argsort(x) >>> print(y) { a: ivy.array([1, 2, 0]), b: ivy.array([[0, 1], [1, 0]]) }
>>> x = ivy.Container(a=ivy.array([[3.5, 5],[2.4, 1]])) >>> y = ivy.argsort(x) >>> print(y) { a: ivy.array([[0,1],[1,0]]) }
>>> x = ivy.Container(a=ivy.array([4,3,6]), b=ivy.array([[4, 5], [2, 4]])) >>> y = ivy.argsort(x, descending=True) >>> print(y) { a: ivy.array([2, 0, 1]), b: ivy.array([[1, 0], [1, 0]]) }
>>> x = ivy.Container(a=ivy.array([[1.5, 3.2],[2.3, 4]]), ... b=ivy.array([[[1,3],[3,2],[2,0]]])) >>> y = x.argsort(axis=-1, descending=True, stable=False) >>> print(y) { a: ivy.array([[1,0],[1,0]]), b: ivy.array([[[1,0],[0, 1],[0, 1]]]) }
- ivy.msort(a, /, *, out=None)[source]#
Return a copy of an array sorted along the first axis.
- Parameters:
- Return type:
- Returns:
ret – sorted array of the same type and shape as a
Examples
>>> a = ivy.asarray([[8, 9, 6],[6, 2, 6]]) >>> ivy.msort(a) ivy.array( [[6, 2, 6], [8, 9, 6]] )
- ivy.searchsorted(x, v, /, *, side='left', sorter=None, ret_dtype='int64', out=None)[source]#
Return the indices of the inserted elements in a sorted array.
- Parameters:
x (
Union
[Array
,NativeArray
]) – Input array. If sorter is None, then it must be sorted in ascending order, otherwise sorter must be an array of indices that sort it.v (
Union
[Array
,NativeArray
]) – specific elements to insert in array x1side (
Literal
['left'
,'right'
], default:'left'
) – The specific elements’ index is at the ‘left’ side or ‘right’ side in the sorted array x1. If the side is ‘left’, the index of the first suitable location located is given. If ‘right’, return the last such index.ret_dtype (
Union
[Dtype
,NativeDtype
], default:'int64'
) – the data type for the return value, Default: ivy.int64, only integer data types is allowed.sorter (
Optional
[Union
[Array
,NativeArray
,List
[int
]]], default:None
) – optional array of integer indices that sort array x into ascending order, typically the result of argsort.out (
Optional
[Array
], default:None
) – optional output array, for writing the result to.
- Return type:
- Returns:
ret – An array of insertion points.
Examples
With
ivy.Array
input:>>> x = ivy.array([1, 2, 3]) >>> v = ivy.array([2]) >>> y = ivy.searchsorted(x, v) >>> print(y) ivy.array([1])
>>> x = ivy.array([0, 1, 2, 3]) >>> v = ivy.array([3]) >>> y = ivy.searchsorted(x, v, side='right') >>> print(y) ivy.array([4])
>>> x = ivy.array([0, 1, 2, 3, 4, 5]) >>> v = ivy.array([[3, 1], [10, 3], [-2, -1]]) >>> y = ivy.searchsorted(x, v) >>> print(y) ivy.array([[3, 1], [6, 3], [0, 0]])
- ivy.sort(x, /, *, axis=-1, descending=False, stable=True, out=None)[source]#
Return a sorted copy of an array.
- Parameters:
x (
Union
[Array
,NativeArray
]) – input arrayaxis (
int
, default:-1
) – axis along which to sort. If set to-1
, the function must sort along the last axis. Default:-1
.descending (
bool
, default:False
) – direction The direction in which to sort the valuesstable (
bool
, default:True
) – sort stability. IfTrue
, the returned indices must maintain the relative order ofx
values which compare as equal. IfFalse
, the returned indices may or may not maintain the relative order ofx
values which compare as equal (i.e., the relative order ofx
values which compare as equal is implementation-dependent). Default:True
.out (
Optional
[Array
], default:None
) – optional output array, for writing the result to. It must have the same shape asx
.
- Return type:
- Returns:
ret – An array with the same dtype and shape as
x
, with the elements sorted along the given axis.
This function conforms to the Array API Standard. This docstring is an extension of the docstring in the standard.
Both the description and the type hints above assumes an array input for simplicity, but this function is nestable, and therefore also accepts
ivy.Container
instances in place of any of the argumentsExamples
With
ivy.Array
input:>>> x = ivy.array([7, 8, 6]) >>> y = ivy.sort(x) >>> print(y) ivy.array([6, 7, 8])
>>> x = ivy.array([[[8.9,0], [19,5]],[[6,0.3], [19,0.5]]]) >>> y = ivy.sort(x, axis=1, descending=True, stable=False) >>> print(y) ivy.array([[[19. , 5. ],[ 8.9, 0. ]],[[19. , 0.5],[ 6. , 0.3]]])
>>> x = ivy.array([1.5, 3.2, 0.7, 2.5]) >>> y = ivy.zeros(5) >>> ivy.sort(x, descending=True, stable=False, out=y) >>> print(y) ivy.array([3.2, 2.5, 1.5, 0.7])
>>> x = ivy.array([[1.1, 2.2, 3.3],[-4.4, -5.5, -6.6]]) >>> ivy.sort(x, out=x) >>> print(x) ivy.array([[ 1.1, 2.2, 3.3], [-6.6, -5.5, -4.4]])
With
ivy.Container
input:>>> x = ivy.Container(a=ivy.array([8, 6, 6]),b=ivy.array([[9, 0.7], [0.4, 0]])) >>> y = ivy.sort(x, descending=True) >>> print(y) { a: ivy.array([8, 6, 6]), b: ivy.array([[9., 0.7], [0.4, 0.]]) }
>>> x = ivy.Container(a=ivy.array([3, 0.7, 1]),b=ivy.array([[4, 0.9], [0.6, 0.2]])) >>> y = ivy.sort(x, descending=False, stable=False) >>> print(y) { a: ivy.array([0.7, 1., 3.]), b: ivy.array([[0.9, 4.], [0.2, 0.6]]) }
This should have hopefully given you an overview of the sorting submodule, if you have any questions, please feel free to reach out on our discord!