Class Median
For values of length n, let k = n / 2:
- The result is
NaNifn = 0. - The result is
values[k]ifnis odd. - The result is
(values[k - 1] + values[k]) / 2ifnis even.
This implementation respects the ordering imposed by
Double.compare(double, double) for NaN values. If a NaN occurs
in the selected positions in the fully sorted values then the result is NaN.
The NaNPolicy can be used to change the behaviour on NaN values.
Instances of this class are immutable and thread-safe.
- Since:
- 1.1
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final booleanFlag to indicate if the data should be copied.private static final MedianDefault instance.private final NaNPolicyNaN policy for floating point data.private final NaNTransformerTransformer for NaN data. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate doublecompute(double[] values, int from, int to) Compute the median of the specified range.private doublecompute(int[] values, int from, int to) Compute the median of the specified range.doubleevaluate(double[] values) Evaluate the median.doubleevaluate(int[] values) Evaluate the median.doubleevaluateRange(double[] values, int from, int to) Evaluate the median of the specified range.doubleevaluateRange(int[] values, int from, int to) Evaluate the median of the specified range.Return an instance with the configuredNaNPolicy.withCopy(boolean v) Return an instance with the configured copy behaviour.static MedianReturn a new instance with the default options.
-
Field Details
-
DEFAULT
Default instance. -
copy
private final boolean copyFlag to indicate if the data should be copied. -
nanPolicy
NaN policy for floating point data. -
nanTransformer
Transformer for NaN data.
-
-
Constructor Details
-
Median
- Parameters:
copy- Flag to indicate if the data should be copied.nanPolicy- NaN policy.
-
-
Method Details
-
withDefaults
Return a new instance with the default options.Note: The default options configure for processing in-place and including
NaNvalues in the data. This is the most efficient mode and has the smallest memory consumption.- Returns:
- the median implementation
- See Also:
-
withCopy
Return an instance with the configured copy behaviour. Iffalsethen the input array will be modified by the call to evaluate the median; otherwise the computation uses a copy of the data.- Parameters:
v- Value.- Returns:
- an instance
-
with
Return an instance with the configuredNaNPolicy.Note: This implementation respects the ordering imposed by
Double.compare(double, double)forNaNvalues:NaNis considered greater than all other values, and allNaNvalues are equal. TheNaNPolicychanges the computation of the statistic in the presence ofNaNvalues.NaNPolicy.INCLUDE:NaNvalues are moved to the end of the data; the size of the data includes theNaNvalues and the median will beNaNif any value used for median interpolation isNaN.NaNPolicy.EXCLUDE:NaNvalues are moved to the end of the data; the size of the data excludes theNaNvalues and the median will never beNaNfor non-zero size. If all data areNaNthen the size is zero and the result isNaN.NaNPolicy.ERROR: An exception is raised if the data containsNaNvalues.
Note that the result is identical for all policies if no
NaNvalues are present.- Parameters:
v- Value.- Returns:
- an instance
-
evaluate
public double evaluate(double[] values) Evaluate the median.Note: This method may partially sort the input values if not configured to
copythe input data.- Parameters:
values- Values.- Returns:
- the median
- Throws:
IllegalArgumentException- if the values contain NaN and the configuration isNaNPolicy.ERROR- See Also:
-
evaluateRange
public double evaluateRange(double[] values, int from, int to) Evaluate the median of the specified range.Note: This method may partially sort the input values if not configured to
copythe input data.- Parameters:
values- Values.from- Inclusive start of the range.to- Exclusive end of the range.- Returns:
- the median
- Throws:
IllegalArgumentException- if the values contain NaN and the configuration isNaNPolicy.ERRORIndexOutOfBoundsException- if the sub-range is out of bounds- Since:
- 1.2
- See Also:
-
compute
private double compute(double[] values, int from, int to) Compute the median of the specified range.- Parameters:
values- Values.from- Inclusive start of the range.to- Exclusive end of the range.- Returns:
- the median
-
evaluate
public double evaluate(int[] values) Evaluate the median.Note: This method may partially sort the input values if not configured to
copythe input data.- Parameters:
values- Values.- Returns:
- the median
-
evaluateRange
public double evaluateRange(int[] values, int from, int to) Evaluate the median of the specified range.Note: This method may partially sort the input values if not configured to
copythe input data.- Parameters:
values- Values.from- Inclusive start of the range.to- Exclusive end of the range.- Returns:
- the median
- Throws:
IndexOutOfBoundsException- if the sub-range is out of bounds- Since:
- 1.2
-
compute
private double compute(int[] values, int from, int to) Compute the median of the specified range.- Parameters:
values- Values.from- Inclusive start of the range.to- Exclusive end of the range.- Returns:
- the median
-