summaryrefslogtreecommitdiff
path: root/numpy/lib/function_base.py
diff options
context:
space:
mode:
authorabel <aoun@cerfacs.fr>2021-11-09 10:35:12 +0100
committerabel <aoun@cerfacs.fr>2021-11-09 10:39:37 +0100
commit6cd68755c6fd0686dd57a9daec43d8aa09d15c3e (patch)
tree8308a87b1b8fdc1ce6cd2337e3fc576c039f49b4 /numpy/lib/function_base.py
parentc280e21a74f2a6fd16d9c318696fcf167689baa3 (diff)
downloadnumpy-6cd68755c6fd0686dd57a9daec43d8aa09d15c3e.tar.gz
MTH: Update quantile default lerp method
For method 7 of H&F, using `(n - 1) * quantiles` instead of the usual method gives a more accurate result.
Diffstat (limited to 'numpy/lib/function_base.py')
-rw-r--r--numpy/lib/function_base.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index 86125168a..3c9983edf 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -67,7 +67,7 @@ __all__ = [
# fix_gamma : Callable
# A function used for discret methods to force the index to a specific value.
_QuantileInterpolation = dict(
- # --- HYNDMAN and FAN methods
+ # --- HYNDMAN AND FAN METHODS
# Discrete methods
inverted_cdf=dict(
get_virtual_index=lambda n, quantiles: _inverted_cdf(n, quantiles),
@@ -102,10 +102,12 @@ _QuantileInterpolation = dict(
_compute_virtual_index(n, quantiles, 0, 0),
fix_gamma=lambda gamma, _: gamma,
),
- # Default value
+ # Default method.
+ # To avoid some rounding issues, `(n-1) * quantiles` is preferred to
+ # `_compute_virtual_index(n, quantiles, 1, 1)`.
+ # They are mathematically equivalent.
linear=dict(
- get_virtual_index=lambda n, quantiles:
- _compute_virtual_index(n, quantiles, 1, 1),
+ get_virtual_index=lambda n, quantiles: (n - 1) * quantiles,
fix_gamma=lambda gamma, _: gamma,
),
median_unbiased=dict(
@@ -118,7 +120,7 @@ _QuantileInterpolation = dict(
_compute_virtual_index(n, quantiles, 3 / 8.0, 3 / 8.0),
fix_gamma=lambda gamma, _: gamma,
),
- # --- OTHER METHODS fixme add deprecated ?
+ # --- OTHER METHODS
lower=dict(
get_virtual_index=lambda n, quantiles: np.floor(
(n - 1) * quantiles).astype(np.intp),