Computing the rank - GNU Scientific Library -- Reference Manual
Description: GNU Scientific Library -- Reference Manual

Next: Sorting Examples, Previous: Selecting the k smallest or largest elements, Up: Sorting

### 12.4 Computing the rank

The rank of an element is its order in the sorted data. The rank is the inverse of the index permutation, p. It can be computed using the following algorithm,

         for (i = 0; i < p->size; i++)
         {
             size_t pi = p->data[i];
             rank->data[pi] = i;
         }

This can be computed directly from the function `gsl_permutation_inverse(rank,p)`.

The following function will print the rank of each element of the vector v,

         void
         print_rank (gsl_vector * v)
         {
           size_t i;
           size_t n = v->size;
           gsl_permutation * perm = gsl_permutation_alloc(n);
           gsl_permutation * rank = gsl_permutation_alloc(n);

           gsl_sort_vector_index (perm, v);
           gsl_permutation_inverse (rank, perm);

           for (i = 0; i < n; i++)
            {
             double vi = gsl_vector_get(v, i);
             printf ("element = %d, value = %g, rank = %d\n",
                      i, vi, rank->data[i]);
            }

           gsl_permutation_free (perm);
           gsl_permutation_free (rank);
         }

The GNU Scientific Library - a free numerical library licensed under the GNU GPL
Back to the GNU Scientific Library Homepage