Logo ROOT   6.16/01
Reference Guide
Namespaces
vo004_SortAndSelect.py File Reference

Namespaces

namespace  vo004_SortAndSelect
 

Detailed Description

View in nbviewer Open in SWAN In this tutorial we learn how elements of an RVec can be easily sorted and selected.

import ROOT
from ROOT.VecOps import RVec, Argsort, Take, Sort, Reverse
# RVec can be sorted in Python with the inbuilt sorting function because
# PyROOT implements a Python iterator
v1 = RVec("double")(3)
v1[0], v1[1], v1[2] = 6, 4, 5
v2 = sorted(v1)
print("Sort vector {}: {}".format(v1, v2))
# For convenience, ROOT implements helpers, e.g., to get a sorted copy of
# an RVec ...
v2 = Sort(v1);
print("Sort vector {}: {}".format(v1, v2))
# ... or a reversed copy of an RVec.
v2 = Reverse(v1);
print("Reverse vector {}: {}".format(v1, v2))
# Helpers are provided to get the indices that sort the vector and to
# select these indices from an RVec.
v2 = Argsort(v1)
print("Indices that sort the vector {}: {}".format(v1, v2))
v3 = RVec("double")(3)
v3[0], v3[1], v3[2] = 9, 7, 8
v4 = Take(v3, v2)
print("Sort vector {} respective to the previously determined indices: {}".format(v3, v4))
# Take can also be used to get the first or last elements of an RVec.
v2 = Take(v1, 2)
v3 = Take(v1, -2)
print("Take the two first and last elements of vector {}: {}, {}".format(v1, v2, v3))
# Because the VecOps helpers return a copy of the input, you can chain the operations
# conveniently.
v2 = Reverse(Take(Sort(v1), -2))
print("Sort the vector {}, take the two last elements and reverse the selection: {}".format(v1, v2))
RVec< T > Reverse(const RVec< T > &v)
Return copy of reversed vector.
Definition: RVec.hxx:940
RVec< T > Take(const RVec< T > &v, const RVec< typename RVec< T >::size_type > &i)
Return elements of a vector at given indices.
Definition: RVec.hxx:882
RVec< typename RVec< T >::size_type > Argsort(const RVec< T > &v)
Return an RVec of indices that sort the input RVec.
Definition: RVec.hxx:862
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
Definition: TMathBase.h:362
Sort vector { 6.0000000, 4.0000000, 5.0000000 }: [4.0, 5.0, 6.0]
Sort vector { 6.0000000, 4.0000000, 5.0000000 }: { 4.0000000, 5.0000000, 6.0000000 }
Reverse vector { 6.0000000, 4.0000000, 5.0000000 }: { 5.0000000, 4.0000000, 6.0000000 }
Indices that sort the vector { 6.0000000, 4.0000000, 5.0000000 }: { 1, 2, 0 }
Sort vector { 9.0000000, 7.0000000, 8.0000000 } respective to the previously determined indices: { 7.0000000, 8.0000000, 9.0000000 }
Take the two first and last elements of vector { 6.0000000, 4.0000000, 5.0000000 }: { 6.0000000, 4.0000000 }, { 4.0000000, 5.0000000 }
Sort the vector { 6.0000000, 4.0000000, 5.0000000 }, take the two last elements and reverse the selection: { 6.0000000, 5.0000000 }
Date
August 2018
Author
Stefan Wunsch

Definition in file vo004_SortAndSelect.py.