pytesmo package¶
Subpackages¶
Submodules¶
pytesmo.df_metrics module¶
Module contains wrappers for methods in pytesmo.metrics which can be given pandas.DataFrames instead of single numpy.arrays . If the DataFrame has more columns than the function has input parameters the function will be applied pairwise
Created on Aug 14, 2013
@author: Christoph Paulik Christoph.Paulik@geo.tuwien.ac.at

exception
pytesmo.df_metrics.
DataFrameDimensionError
[source]¶ Bases:
Exception

args
¶

with_traceback
()¶ Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.


pytesmo.df_metrics.
RSS
(df)[source]¶ Redidual sum of squares
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also

pytesmo.df_metrics.
bias
(df)[source]¶ Bias
Returns: bias – of shape (len(df.columns),len(df.columns)) Return type: pandas.Dataframe See also

pytesmo.df_metrics.
kendalltau
(df)[source]¶ Wrapper for scipy.stats.kendalltau
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple

pytesmo.df_metrics.
mse
(df)[source]¶ Mean square error (MSE) as a decomposition of the RMSD into individual error components
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also

pytesmo.df_metrics.
nash_sutcliffe
(df)[source]¶ Nash Sutcliffe model efficiency coefficient
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also

pytesmo.df_metrics.
nrmsd
(df)[source]¶ Normalized rootmeansquare deviation
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also

pytesmo.df_metrics.
pairwise_apply
(df, method, comm=False)[source]¶ Compute given method pairwise for all columns, excluding NA/null values
Parameters:  df (pandas.DataFrame) – input data, method will be applied to each column pair
 method (function) – method to apply to each column pair. has to take 2 input arguments of type numpy.array and return one value or tuple of values
Returns: results
Return type:

pytesmo.df_metrics.
pearsonr
(df)[source]¶ Wrapper for scipy.stats.pearsonr
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple

pytesmo.df_metrics.
rmsd
(df)[source]¶ Rootmeansquare deviation
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also

pytesmo.df_metrics.
spearmanr
(df)[source]¶ Wrapper for scipy.stats.spearmanr
Returns: result – with column names of df for which the calculation was done as name of the element separated by ‘_and_’ Return type: namedtuple See also
pytesmo.metrics.spearmenr()
,scipy.stats.spearmenr()

pytesmo.df_metrics.
tcol_error
(df)[source]¶ Triple collocation error estimate In this case df has to have exactly 3 columns, since triple wise application of a function is not yet implemented and would probably return a complicated structure
Returns: result – with column names of df Return type: namedtuple See also
pytesmo.metrics module¶

pytesmo.metrics.
RSS
(o, p)[source]¶ Residual sum of squares.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns: res – Residual sum of squares.
Return type:

pytesmo.metrics.
aad
(o, p)[source]¶ Average (=mean) absolute deviation (AAD).
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predicitions.
Returns: d – Mean absolute deviation.
Return type:

pytesmo.metrics.
bias
(o, p)[source]¶ Difference of the mean values.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns: bias – Bias between observations and predictions.
Return type:

pytesmo.metrics.
check_if_biased
(combs, correlated)[source]¶ Supporting function for extended collocation Checks whether the estimators are biased by checking of not too manny data sets (are assumed to have crosscorrelated errors)

pytesmo.metrics.
ecol
(data, correlated=None, err_cov=None, abs_est=True)[source]¶  Extended collocation analysis to obtain estimates of:
 signal variances
 error variances
 signaltonoise ratios [dB]
 error crosscovariances (and correlations)
based on an arbitrary number of N>3 data sets.
!!! EACH DATA SET MUST BE MEMBER OF >= 1 TRIPLET THAT FULFILLS THE CLASSICAL TRIPLE COLLOCATION ASSUMPTIONS !!!
Parameters:  data (pd.DataFrame) – Temporally matched input data sets in each column
 correlated (tuple of tuples (string)) – A tuple containing tuples of data set names (column names), between which the error crosscorrelation shall be estimated. e.g. [[‘AMSRE’,’SMOS’],[‘GLDAS’,’ERA’]] estimates error crosscorrelations between (AMSRE and SMOS), and (GLDAS and ERA), respectively.
 err_cov – A priori known error crosscovariances that shall be included in the estimation (to obtain unbiased estimates)
 abs_est – Force absolute values for signal and error variance estimates (to mitiate the issue of estimation uncertainties)
Returns:  A dictionary with the following entries (<name> correspond to data set (df column’s) names
  sig_<name> (signal variance of <name>)
  err_<name> (error variance of <name>)
  snr_<name> (SNR (in dB) of <name>)
  err_cov_<name1>_<name2> (error covariance between <name1> and <name2>)
  err_corr_<name1>_<name2> (error correlation between <name1> and <name2>)
Notes
Rescaling parameters can be derived from the signal variances e.g., scaling <src> against <ref>: beta = np.sqrt(sig_<ref> / sig_<src>) rescaled = (data[<src>]  data[<src>].mean()) * beta + data[<ref>].mean()
References
[Gruber2016] Gruber, A., Su, C. H., Crow, W. T., Zwieback, S., Dorigo, W. A., & Wagner, W. (2016). Estimating error crosscorrelations in soil moisture data sets using extended collocation analysis. Journal of Geophysical Research: Atmospheres, 121(3), 12081219.

pytesmo.metrics.
index_of_agreement
(o, p)[source]¶ Index of agreement was proposed by Willmot (1981), to overcome the insenstivity of NashSutcliffe efficiency E and R^2 to differences in the observed and predicted means and variances (Legates and McCabe, 1999). The index of agreement represents the ratio of the mean square error and the potential error (Willmot, 1984). The potential error in the denominator represents the largest value that the squared difference of each pair can attain. The range of d is similar to that of R^2 and lies between 0 (no correlation) and 1 (perfect fit).
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns: d – Index of agreement.
Return type:

pytesmo.metrics.
kendalltau
(o, p)[source]¶ Wrapper for scipy.stats.kendalltau
Parameters:  o (numpy.array) – Observations.
 p (numpy.array) – Predictions.
Returns:  Kendall’s tau (float) – The tau statistic
 pvalue (float) – The twosided ppalue for a hypothesis test whose null hypothesis is an absence of association, tau = 0.
See also

pytesmo.metrics.
mad
(o, p)[source]¶ Median absolute deviation (MAD).
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predicitions.
Returns: d – Median absolute deviation.
Return type:

pytesmo.metrics.
mse
(o, p, ddof=0)[source]¶ Mean square error (MSE) as a decomposition of the RMSD into individual error components. The MSE is the second moment (about the origin) of the error, and thus incorporates both the variance of the estimator and its bias. For an unbiased estimator, the MSE is the variance of the estimator. Like the variance, MSE has the same units of measurement as the square of the quantity being estimated. The delta degree of freedom keyword (ddof) can be used to correct for the case the true variance is unknown and estimated from the population. Concretely, the naive sample variance estimator sums the squared deviations and divides by n, which is biased. Dividing instead by n  1 yields an unbiased estimator.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
 ddof (int, optional) – Delta degree of freedom.The divisor used in calculations is N  ddof, where N represents the number of elements. By default ddof is zero.
Returns:  mse (float) – Mean square error (MSE).
 mse_corr (float) – Correlation component of MSE.
 mse_bias (float) – Bias component of the MSE.
 mse_var (float) – Variance component of the MSE.

pytesmo.metrics.
nash_sutcliffe
(o, p)[source]¶ Nash Sutcliffe model efficiency coefficient E. The range of E lies between 1.0 (perfect fit) and inf.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns: E – Nash Sutcliffe model efficiency coefficient E.
Return type:

pytesmo.metrics.
nrmsd
(o, p, ddof=0)[source]¶ Normalized rootmeansquare deviation (nRMSD).
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
 ddof (int, optional) – Delta degree of freedom.The divisor used in calculations is N  ddof, where N represents the number of elements. By default ddof is zero.
Returns: nrmsd – Normalized rootmeansquare deviation (nRMSD).
Return type:

pytesmo.metrics.
pearson_conf
(r, n, c=95)[source]¶ Calcalates the confidence interval of a given pearson correlation coefficient using a fisher ztransform, only valid for correlation coefficients calculated from a bivariate normal distribution
Parameters:  r (float or numpy.ndarray) – Correlation coefficient
 n (int or numpy.ndarray) – Number of observations used in determining the correlation coefficient
 c (float) – Level of confidence in percent, from 0100.
Returns:  r_lower (float or numpy.ndarray) – Lower confidence boundary.
 r_upper (float or numpy.ndarray) – Upper confidence boundary.

pytesmo.metrics.
pearsonr
(o, p)[source]¶ Wrapper for scipy.stats.pearsonr. Calculates a Pearson correlation coefficient and the pvalue for testing noncorrelation.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns:  r (float) – Pearson’s correlation coefficent.
 pvalue (float) – 2 tailed pvalue.
See also

pytesmo.metrics.
pearsonr_recursive
(x, y, n_old=0, sum_xi_yi=0, sum_xi=0, sum_yi=0, sum_x2=0, sum_y2=0)[source]¶ Calculate pearson correlation in a recursive manner based on
Parameters:  x (numpy.ndarray) – New values for x
 y (numpy.ndarray) – New values for y
 n_old (float, optional) – number of observations from previous pass
 sum_xi_yi (float, optional) –
from previous pass
 sum_xi (float, optional) –
from previous pass
 sum_yi (float, optional) –
from previous pass
 sum_x2 (float, optional) –
from previous pass
 sum_y2 (float, optional) –
from previous pass
Returns:  r (float) – Pearson correlation coefficient
 params (tuple) – tuple of (n_new, sum_xi_yi, sum_xi, sum_yi, sum_x2, sum_y2) .
Can be used when calling the next iteration as
*params
.

pytesmo.metrics.
rmsd
(o, p, ddof=0)[source]¶ Rootmeansquare deviation (RMSD). It is implemented for an unbiased estimator, which means the RMSD is the square root of the variance, also known as the standard error. The delta degree of freedom keyword (ddof) can be used to correct for the case the true variance is unknown and estimated from the population. Concretely, the naive sample variance estimator sums the squared deviations and divides by n, which is biased. Dividing instead by n 1 yields an unbiased estimator
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
 ddof (int, optional) – Delta degree of freedom.The divisor used in calculations is N  ddof, where N represents the number of elements. By default ddof is zero.
Returns: rmsd – Rootmeansquare deviation.
Return type:

pytesmo.metrics.
spearmanr
(o, p)[source]¶ Wrapper for scipy.stats.spearmanr. Calculates a Spearman rankorder correlation coefficient and the pvalue to test for noncorrelation.
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
Returns:  rho (float) – Spearman correlation coefficient
 pvalue (float) – The twosided pvalue for a hypothesis test whose null hypothesis is that two sets of data are uncorrelated
See also
scipy.stats.spearmenr()

pytesmo.metrics.
tcol_error
(x, y, z)[source]¶ Triple collocation error estimate of three calibrated/scaled datasets.
Parameters:  x (numpy.ndarray) – 1D numpy array to calculate the errors
 y (numpy.ndarray) – 1D numpy array to calculate the errors
 z (numpy.ndarray) – 1D numpy array to calculate the errors
Returns:  e_x (float) – Triple collocation error for x.
 e_y (float) – Triple collocation error for y.
 e_z (float) – Triple collocation error for z.
Notes
This function estimates the triple collocation error based on already scaled/calibrated input data. It follows formula 4 given in [Scipal2008].
where the brackets mean the temporal mean.
References
[Scipal2008] Scipal, K., Holmes, T., De Jeu, R., Naeimi, V., & Wagner, W. (2008). A possible solution for the problem of estimating the error structure of global soil moisture data sets. Geophysical Research Letters, 35(24), .

pytesmo.metrics.
tcol_snr
(x, y, z, ref_ind=0)[source]¶ triple collocation based estimation of signaltonoise ratio, absolute errors, and rescaling coefficients
Parameters:  x (1D numpy.ndarray) – first input dataset
 y (1D numpy.ndarray) – second input dataset
 z (1D numpy.ndarray) – third input dataset
 ref_ind (int) – index of reference data set for estimating scaling coefficients. default: 0 (x)
Returns:  snr (numpy.ndarray) – signaltonoise (variance) ratio [dB]
 err_std (numpy.ndarray) – SCALED error standard deviation
 beta (numpy.ndarray) – scaling coefficients (i_scaled = i * beta_i)
Notes
This function estimates the triple collocation errors, the scaling parameter and the signal to noise ratio directly from the covariances of the dataset. For a general overview and how this function and
pytesmo.metrics.tcol_error()
are related please see [Gruber2015].Estimation of the error variances from the covariances of the datasets (e.g. for the covariance between and ) is done using the following formula:
can also be estimated from the covariances:
The signal to noise ratio (SNR) is also calculated from the variances and covariances:
It is given in dB to make it symmetric around zero. If the value is zero it means that the signal variance and the noise variance are equal. +3dB means that the signal variance is twice as high as the noise variance.
References
[Gruber2015] Gruber, A., Su, C., Zwieback, S., Crow, W., Dorigo, W., Wagner, W. (2015). Recent advances in (soil moisture) triple collocation analysis. International Journal of Applied Earth Observation and Geoinformation, in review

pytesmo.metrics.
ubrmsd
(o, p, ddof=0)[source]¶ Unbiased rootmeansquare deviation (uRMSD).
Parameters:  o (numpy.ndarray) – Observations.
 p (numpy.ndarray) – Predictions.
 ddof (int, optional) – Delta degree of freedom.The divisor used in calculations is N  ddof, where N represents the number of elements. By default ddof is zero.
Returns: urmsd – Unbiased rootmeansquare deviation (uRMSD).
Return type:
pytesmo.scaling module¶
Created on Apr 17, 2013
@author: Christoph Paulik christoph.paulik@geo.tuwien.ac.at

pytesmo.scaling.
add_scaled
(df, method='linreg', label_in=None, label_scale=None)[source]¶ takes a dataframe and appends a scaled time series to it. If no labels are given the first column will be scaled to the second column of the DataFrame
Parameters:  df (pandas.DataFrame) – input dataframe
 method (string) – scaling method
 label_in (string, optional) – the column of the dataframe that should be scaled to that with label_scale default is the first column
 label_scale (string, optional) – the column of the dataframe the label_in column should be scaled to default is the second column
Returns: df – input dataframe with new column labeled label_in+’_scaled_’+method
Return type:

pytesmo.scaling.
cdf_match
(src, ref, min_val=None, max_val=None, nbins=100)[source]¶ computes cumulative density functions of src and ref at their respective binedges by 5th order spline interpolation; then matches CDF of src to CDF of ref.
This function does not make sure that the percentiles are unique so it can happen that multiple measurements are scaled to one point or that there are NaN values in the output array.
Parameters:  src (numpy.array) – input dataset which will be scaled
 ref (numpy.array) – src will be scaled to this dataset
 min_val (float, optional) – Minimum allowed value, output data is capped at this value
 max_val (float, optional) – Maximum allowed value, output data is capped at this value
 nbins (int, optional) – Number of bins to use for estimation of the CDF
Returns: CDF matched values – dataset src with CDF as ref
Return type:

pytesmo.scaling.
gen_cdf_match
(src, perc_src, perc_ref, min_val=None, max_val=None, k=1)[source]¶ General cdf matching:
 computes discrete cumulative density functions of src and ref at the given percentiles
 computes continuous CDFs by kth order spline fitting
 CDF of src is matched to CDF of ref
Parameters:  src (numpy.array) – input dataset which will be scaled
 perc_src (numpy.array) – percentiles of src
 perc_ref (numpy.array) – percentiles of reference data estimated through method of choice, must be same size as perc_src
 min_val (float, optional) – Minimum allowed value, output data is capped at this value
 max_val (float, optional) – Maximum allowed value, output data is capped at this value
 k (int, optional) – Order of spline to fit
Returns: CDF matched values – dataset src with CDF as ref
Return type:

pytesmo.scaling.
get_scaling_function
(method)[source]¶ Get scaling function based on method name.
Parameters: method (string) – method name as string Returns: scaling_func – function(src:numpy.ndarray, ref:numpy.ndarray) > scaled_src:np.ndarray Return type: function Raises: KeyError: – if method is not found

pytesmo.scaling.
get_scaling_method_lut
()[source]¶ Get all defined scaling methods and their function names.
Returns: lut – key: scaling method name value: function Return type: dictionary

pytesmo.scaling.
lin_cdf_match
(src, ref, min_val=None, max_val=None, percentiles=[0, 5, 10, 30, 50, 70, 90, 95, 100])[source]¶ computes cumulative density functions of src and ref at their respective binedges by linear interpolation; then matches CDF of src to CDF of ref.
This function does not make sure that the percentiles are unique so it can happen that multiple measurements are scaled to one point or that there are NaN values in the output array.
Parameters:  src (numpy.array) – input dataset which will be scaled
 ref (numpy.array) – src will be scaled to this dataset
 min_val (float, optional) – Minimum allowed value, output data is capped at this value
 max_val (float, optional) – Maximum allowed value, output data is capped at this value
 percentiles (list or numpy.ndarray) – Percentiles to use for CDF matching
Returns: CDF matched values – dataset src with CDF as ref
Return type:

pytesmo.scaling.
lin_cdf_match_stored_params
(src, perc_src, perc_ref, min_val=None, max_val=None)[source]¶ Performs cdf matching using given percentiles.
Parameters:  src (numpy.array) – input data to scale
 perc_src (numpy.array) – percentiles of src estimated through method of choice
 perc_ref (numpy.array) – percentiles of reference data estimated through method of choice, must be same size as perc_src
 min_val (float, optional) – Minimum allowed value, output data is capped at this value
 max_val (float, optional) – Maximum allowed value, output data is capped at this value

pytesmo.scaling.
linreg
(src, ref)[source]¶ scales the input datasets using linear regression
Parameters:  src (numpy.array) – input dataset which will be scaled
 ref (numpy.array) – src will be scaled to this dataset
Returns: scaled dataset – dataset scaled using linear regression
Return type:

pytesmo.scaling.
mean_std
(src, ref)[source]¶ scales the input datasets so that they have the same mean and standard deviation afterwards
Parameters:  src (numpy.array) – input dataset which will be scaled
 ref (numpy.array) – src will be scaled to this dataset
Returns: scaled dataset – dataset src with same mean and standard deviation as ref
Return type:

pytesmo.scaling.
min_max
(src, ref)[source]¶ scales the input datasets so that they have the same minimum and maximum afterwards
Parameters:  src (numpy.array) – input dataset which will be scaled
 ref (numpy.array) – src will be scaled to this dataset
Returns: scaled dataset – dataset src with same maximum and minimum as ref
Return type:

pytesmo.scaling.
scale
(df, method='linreg', reference_index=0)[source]¶ takes pandas.DataFrame and scales all columns to the column specified by reference_index with the chosen method
Parameters:  df (pandas.DataFrame) – containing matched time series that should be scaled
 method (string, optional) – method definition, has to be a function in globals() that takes 2 numpy.array as input and returns one numpy.array of same length
 reference_index (int, optional) – default 0, column index of reference dataset in dataframe
Returns: scaled data – all time series of the input DataFrame scaled to the one specified by reference_index
Return type:
pytesmo.temporal_matching module¶
Provides a temporal matching function

pytesmo.temporal_matching.
df_match
(reference, *args, **kwds)[source]¶ Finds temporal match between the reference pandas.DataFrame (index has to be datetime) and n other pandas.DataFrame (index has to be datetime).
Parameters:  reference (pandas.DataFrame or pandas.TimeSeries) – The index of this dataframe will be the reference.
 *args (pandas.DataFrame or pandas.TimeSeries) – The index of this dataframe(s) will be matched. If it is a pandas.Series then it has to have a name. Otherwise no column name can be assigned to the matched DataFrame.
 window (float) – Fraction of days of the maximum pos./neg. distance allowed, i.e. the value of window represents the halfwinow size (e.g. window=0.5, will search for matches between 12 and +12 hours) (default: None)
 dropna (boolean) – Drop rows containing only NaNs (default: False)
 dropduplicates (boolean) – Drop duplicated temporal matched (default: False)
 asym_window (string, optional) –
<=
stands for using a smaller and equal only for the left/smaller side of the window comparison>=
stands for using a larger and equal only for the right/larger side of the window comparison The default is to use <= and >= for both sides of the search window
Returns: temporal_matched_args – Dataframe with index from matched reference index
Return type: pandas.DataFrame or tuple of pandas.DataFrame

pytesmo.temporal_matching.
matching
(reference, *args, **kwargs)[source]¶ Finds temporal match between the reference pandas.TimeSeries (index has to be datetime) and n other pandas.TimeSeries (index has to be datetime).
Parameters:  reference (pandas.TimeSeries) – The index of this Series will be the reference.
 *args (pandas.TimeSeries) – The index of these Series(s) will be matched.
 window (float) – Fraction of days of the maximum pos./neg. distance allowed, i.e. the value of window represents the halfwinow size (e.g. window=0.5, will search for matches between 12 and +12 hours) (default: None)
Returns: temporal_match – containing the index of the reference Series and a column for each of the other input Series
Return type:
pytesmo.utils module¶
Module containing utility functions that do not fit into other modules

pytesmo.utils.
element_iterable
(el)[source]¶ Test if a element is iterable
Parameters: el (object) – Returns: iterable – if True then then el is iterable if Fales then not Return type: boolean

pytesmo.utils.
ensure_iterable
(el)[source]¶ Ensure that an object is iterable by putting it into a list. Strings are handled slightly differently. They are technically iterable but we want to keep the whole.
Parameters: el (object) – Returns: iterable – [el] Return type: list

pytesmo.utils.
interp_uniq
(src)[source]¶ replace non unique values by their linear interpolated value This method interpolates iteratively like it is done in IDL.
Parameters: src (numpy.array) – array to ensure uniqueness of Returns: src – interpolated unique values in array of same size as src Return type: numpy.array

pytesmo.utils.
ml_percentile
(in_data, percentiles)[source]¶ Calculate percentiles in the way Matlab and IDL do it.
By using interpolation between the lowest an highest rank and the minimum and maximum outside.
Parameters:  in_data (numpy.ndarray) – input data
 percentiles (numpy.ndarray) – percentiles at which to calculate the values
Returns: perc – values of the percentiles
Return type:

pytesmo.utils.
unique_percentiles_beta
(perc_values, percentiles)[source]¶ Compute unique percentile values by fitting the CDF of a beta distribution to the percentiles.
Parameters:  perc_values (list or numpy.ndarray) – calculated values for the given percentiles
 percentiles (list or numpy.ndarray) – Percentiles to use for CDF matching
Returns: uniq_perc_values – Unique percentile values generated through fitting the CDF of a beta distribution.
Return type: Raises: RuntimeError
– If no fit could be found.

pytesmo.utils.
unique_percentiles_interpolate
(perc_values, percentiles=[0, 5, 10, 30, 50, 70, 90, 95, 100], k=1)[source]¶ Try to ensure that percentile values are unique and have values for the given percentiles.
If only all the values in perc_values are the same. The array is unchanged.
Parameters:  perc_values (list or numpy.ndarray) – calculated values for the given percentiles
 percentiles (list or numpy.ndarray) – Percentiles to use for CDF matching
 k (int) – Degree of spline interpolation to use for filling duplicate percentile values
Returns: uniq_perc_values – Unique percentile values generated through linear interpolation over removed duplicate percentile values
Return type: