| Operator to calculate percentile values
| for an input tensor of data, given samples
| of data from the same distribution,
| labeled with their percentile values.
|
| This operator is used to find percentile
| representations for raw values, given
| a sample set of raw values, labeled with
| their corresponding percentiles from
| the same distribution.
|
| In particular, this operator takes
| as input a tensor of floats to find the
| percentile values for, a 2D tensor of
| floats, where the first column of the
| tensor represents sampled values,
| and the second column represents the
| percentile labels, and a tensor of integers
| lengths.
|
| This lengths tensor is used because
| the operator works on multiple sets
| of raw values at the same time. For example,
| for an input:
|
| original_values=[[3, 5, 3],[5, 1, 6]],
|
| lengths = [2, 1, 1],
|
| value_to_pct = [[3, 0.2], [5, 0.5], [1, 0.3], [3. 0.6]]
|
| Our operator expects that each column
| i of the input tensor is sampled from
| distribution i. Lengths tells us that
| the first two elements in value_to_pct
| are sampled from distribution 1, the
| next is from distribution two, and the
| last is from distribution 3. We expect
| the output of our operator to give us
| [[0.2, 1.0, 0.6], [0.5, 0.3, 1.0]].
|
| To calculate the percentile of an element,
| we check to see if its value is already
| mapped to a percentile in value_to_pct.
| If so, we return that value. If not, we
| linearly interpolate between the two
| closest values in value_to_pct. If
| the value is larger than all values in
| value_to_pct, we return 1. If it’s smaller
| than all the values, we return 0.
|