The C interface for sort. More...

Device pointer interface: Sort the input values

Sort an array of values along specified dimension.

Output both values and indices.

Parameters
[out]d_sortedSorted values
[out]d_IndicesIndices indicating original positions. One indexed
[in]ndimsNumber of dimensions in dims
[in]dimsDimensions of input
[in]d_inputOriginal array values
[in]DIRSort direction: true in descending order, false in ascending order.
[in]dimDimension to sort along (first dimension is zero)
[in]batchNumber of tiles in batch.
[in]base_oneTo shift indices to one-based.
afError af_sort_S (float *d_sorted, float *d_Indices, unsigned ndims, const unsigned *dims, float *d_input, bool DIR, unsigned dim, unsigned batch, bool base_one=false)
 Single-precision sort. More...
 
afError af_sort_D (double *d_sorted, double *d_Indices, unsigned ndims, const unsigned *dims, double *d_input, bool DIR, unsigned dim, unsigned batch, bool base_one=false)
 Double-precision sort. More...
 
afError af_sort_I (int *d_sorted, int *d_Indices, unsigned ndims, const unsigned *dims, int *d_input, bool DIR, unsigned dim, unsigned batch, bool base_one=false)
 32-bit Integer sort. More...
 
afError af_sort_U (unsigned *d_sorted, unsigned *d_Indices, unsigned ndims, const unsigned *dims, unsigned *d_input, bool DIR, unsigned dim, unsigned batch, bool base_one=false)
 32-bit Unsigned Integer sort. More...
 

Detailed Description

The C interface for sort.

Sorting an array reorders the elements in the array along the dimension specified.

The defualt order is ascending order. That is, the smallest element along the dimension is places at the first index location and the largest element is placed at the last location. To sort in descending order, set the isdescending flag to true.

The indices array parameter can be used to retrieve the indices of the elements before the sort.

array a = rand(5); //a = [6]
// [9]
// [1]
// [7]
// [4]
a = sort(a,0); //a = [1]
// [4]
// [6]
// [7]
// [9]
array a = rand(5); //a = [6]
// [9]
// [1]
// [7]
// [4]
array out,indices;
sort(out,indices,a,0);
//out,indices = [1],[2]
// [4],[4]
// [6],[0]
// [7],[3]
// [9],[1]

The next sort function can sort the values of an array (value) based on another array (key). The function first sorts the key array and uses the indices from this sort to reorder the value array.

float keys[] = {1, 6, 2, 5, 3, 4};
array value(6,1,values); // [5 10 41 2 5 7]
array key(6,1,keys); // [1 6 2 5 3 4]
array outkeys,outvalues;
sort(outkeys,outvalues,key,value);
print(outvalues); // [5 41 5 7 2 10]
print(outkeys); // [1 2 3 4 5 6]

The function sortdim uses one of the dimensions as key to sort the array.

// sort rows based on first column
array a = floor(5 * randu(5,5));
array b = sortdim(a);
array a = floor(5 * randu(5,5));
const int order[] = {3, 1};
array d = sortdim(a, 0, 2, order);

Function Documentation

afError af_sort_S ( float *  d_sorted,
float *  d_Indices,
unsigned  ndims,
const unsigned *  dims,
float *  d_input,
bool  DIR,
unsigned  dim,
unsigned  batch,
bool  base_one = false 
)

Single-precision sort.

afError af_sort_D ( double *  d_sorted,
double *  d_Indices,
unsigned  ndims,
const unsigned *  dims,
double *  d_input,
bool  DIR,
unsigned  dim,
unsigned  batch,
bool  base_one = false 
)

Double-precision sort.

afError af_sort_I ( int *  d_sorted,
int *  d_Indices,
unsigned  ndims,
const unsigned *  dims,
int *  d_input,
bool  DIR,
unsigned  dim,
unsigned  batch,
bool  base_one = false 
)

32-bit Integer sort.

afError af_sort_U ( unsigned *  d_sorted,
unsigned *  d_Indices,
unsigned  ndims,
const unsigned *  dims,
unsigned *  d_input,
bool  DIR,
unsigned  dim,
unsigned  batch,
bool  base_one = false 
)

32-bit Unsigned Integer sort.