Numpy: рдмрдЧ: numpy.percentile рдЖрдЙрдЯрдкреБрдЯ рд╕реЙрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдХреНрддреВре░ 2019  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

numpy.percentile рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ рд╕реЙрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛:

import numpy as np
q = np.arange(0, 1, 0.01) * 100
percentile = np.percentile(np.array([0, 1, 1, 2, 2, 3, 3 , 4, 5, 5, 1, 1, 9, 9 ,9, 8, 8, 7]) * 0.1, q)
equals_sorted = np.sort(percentile) == percentile
print(equals_sorted)
assert equals_sorted.all()

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:

[рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ рд╕рдЪ
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рдЭреВрдард╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рдЭреВрдард╛
рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рд╕рдЪреНрдЪрд╛ рдЭреВрдард╛]
рдЬреЛрд░рджрд╛рд░ рдЯреНрд░реНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо)
рдореЗрдВ
1 q = np.percentile (np.array ([0, 1, 1, 2, 2, 3, 3, 4, 5, 5, 1, 1, 9, 9, 9, 8, 8, 7]) * 0.1, np.arange (0, 1, 0.01) * 100)
2 рдмрд░рд╛рдмрд░реА_рд╢рд╛рджреА = np.sort (q) == q
----> 3 рдореБрдЦрд░ рдмрд░рд╛рдмрд░ = sorted.all ()

AssertionError:

Numpy / рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА:

1.17.2 3.6.8 (v3.6.8: 3c6b436a57, 24 рджрд┐рд╕рдВрдмрд░ 2018, 02:04:31)
[GCC 4.2.1 рд╕рдВрдЧрдд Apple LLVM 6.0 (рдХреНрд▓реИрдВрдЧ -600.0.57)]

00 - Bug numpy.lib good first issue

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрд░реЗ, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд╕рд╛рде @ eric-wieser рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдЯреЗрдХреНрд╕рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕реНрдб рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реВрдВрдЧрд╛, рдпрд╛ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддрд╛ рд╣реИред
20191209_020250

рд╕рднреА 16 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдЗрд╕реЗ рдЫрд╛рдБрдЯрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗ? Percentile рдПрд▓рд┐рдореЗрдВрдЯрд┐рд╡ рд╣реИ - рдЖрдЙрдЯрдкреБрдЯ рдЗрдирдкреБрдЯ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╣реИрдВред

рдирдорд╕реНрддреЗ !
рджрд░рдЕрд╕рд▓, рдкреНрд░рддрд┐рд╢рддрдХ elmenet- рд╡рд╛рд░ рд╣реИ - рдЬрдм q рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ
np.arange(0, 1, 0.01) * 100 ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ q рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдПрдХрд▓ ULP рдХреЗ рднреАрддрд░ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

рдереЛрдбрд╝рд╛ рдХрдо рдЕрд╕рдлрд▓ рдорд╛рдорд▓рд╛:

In [40]: np.percentile(np.array([0, 1, 1, 2, 2, 3, 3 , 4, 5, 5, 1, 1, 9, 9 ,9, 8, 8, 7]) * 0.1, [89, 90, 95, 96, 98, 99])
Out[40]: array([0.9, 0.9, 0.9, 0.9, 0.9, 0.9])

In [41]: np.diff(_)
Out[41]:
array([-1.11022302e-16,  2.22044605e-16, -1.11022302e-16,  1.11022302e-16,
       -1.11022302e-16])

рдпрд╣рд╛рдБ рдЕрдВрддрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреИрд░-рд╕реЙрд░реНрдЯ-рдиреЗрд╕ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ lerp рд╕рдВрдЪрд╛рд▓рди (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ add(v_below*weights_below, v_above*weights_above) ) рдХрд░рддреЗ рд╣реИрдВ:

https://github.com/numpy/numpy/blob/b9fa88eec62e34e90668940809696bb2450830d9a/numpy/lib/function_base.py/L3907 -L3908

https://github.com/numpy/numpy/blob/b9fa88eec62e34e90668940809696bb2450830d9a/numpy/lib/function_base.py/L3928 -L3929

https://github.com/numpy/numpy/blob/b9fa88eec62e34e90668940809696bb2450830d9a/numpy/lib/function_base.py/L3939 -L3942

рдЯреНрд░реЗрдбрдСрдлрд╝ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ "рд╕рд╣реА" рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рд╣рдордиреЗ рдЕрднреА рдЗрд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИред

рдХреБрдЫ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдпрд╣рд╛рдБ: https://math.stackexchange.com/questions/907327/accurate-floating-point-linear-interpolation

рд╣рд╛рдБ, рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ, +1 рдкрд░рд┐рдЪрд╛рд▓рди рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд░рдиреЗ рдкрд░ рддрд╛рдХрд┐ рдпрд╣ рдХрдбрд╝рд╛рдИ рд╕реЗ рдореЛрдиреЛрдЯреЛрдирд┐рдХ (рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ) рд╣реЛред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕рдЯреАрдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЪрд╛рд▓рди / рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

EDIT: рдкрд╣рд▓реЗ рдЕрдЪреНрдЫреЗ рдЕрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рддред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╢рд╛рдпрдж рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЗ рднреАрддрд░ рдПрдХ рдХрд╛рдлреА рд╕реАрдзреЗ рдЖрдЧреЗ рдкреБрдирд░реНрдЧрдарди рд╣реИред

рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд▓реЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдореИрдВ рдХреБрдЫ рдЕрд╕рдлрд▓ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмреАрдЪ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдк рдХрд░рддреЗ рдереЗред рдпрд╛рдиреА рдПрд░рд┐рдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд╕рднреА рджреЛ 9 рдХреЗ рдмреАрдЪ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдмреАрдЪ рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк 9 рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдк рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдЗрд╕ рдмрдЧ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣рд┐рдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рд╣рдореЗрд╢рд╛ рдПрдХрд░рд╕ рд╣реЛрдЧрд╛, рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреБрдХрдбрд╝реЗ-рдЯреБрдХрдбрд╝реЗ рд╕рдорд╛рд░реЛрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред

@ ngonzo95 рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрддрдиреА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрддреНрд░ рдХреЛ рдмрджрд▓реЗрдВ / рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ (рддрд╛рдХрд┐ рдпрд╣ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реЛ, рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдХреЛрдИ рдЯреБрдХрдбрд╝рд╛ рдЧрдгрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдХреЛрдИ рдЯреБрдХрдбрд╝рд╛ рдЧрдгрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ lerp рдкрд░ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдХреНрдпрд╛ рд╣реИрдВред рдХреБрдЫ рдЬрд┐рдирдХреА рд╣рдо рдкрд░рд╡рд╛рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдореЛрдиреЛрдЯреЛрдирд┐рдХ ( (lerp(a, b, t1) - lerp(a, b, t0)) * (b - a) * (t1 - t0) >= 0 )
  • рдмрд╛рдЙрдВрдбреЗрдб ( a <= lerp(a, b, t) <= b )
  • рд╕рдордорд┐рдд ( lerp(a, b, t) == lerp(b, a, 1-t) )

( 0 <= t <= 1 )

рдУрд╣ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдЯреБрдХрдбрд╝рд╛-рдЯреБрдХрдбрд╝рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдкрд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди a + (ba) * t рдореЗрдВ рджреЛрдиреЛрдВ рдореЛрдиреЛрдЯреЛрдирд┐рдХ (рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛) рдФрд░ рд╕реБрд╕рдВрдЧрдд (lerp (a, t) = a) рд╣реЛрдиреЗ рдХрд╛ рдЧреБрдг рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдореБрдЦреНрдп рдбреНрд░рд╛ рдмреИрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ lerp (рдП, рдмреА, 1)! = рдмреАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ 0 <= t <1ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдореБрдЦреНрдп рдбреНрд░рд╛ рдмреИрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ lerp (рдП, рдмреА, 1)! = рдмреАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ 0 <= t <1ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ lerp(a, b. 1-eps) > b) рдЙрд╕ рд╕реВрддреНрд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИред

рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдирдпрд╛ред
рдореЗрд░реЗ рдкрд╣рд▓реЗ рдЕрдЪреНрдЫреЗ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рдХреИрд╕реЗ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдХреЛрдИ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ рд╣реИрдВ?

рдореИрдВ рдХреБрдЫ рдЕрд╕рдлрд▓ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмреАрдЪ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдк рдХрд░рддреЗ рдереЗ

Scikit-learn рдореЗрдВ, рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдареЛрдХрд░ рдЦрд╛рдИ: https://github.com/scikit-learn/scikit-learn/issues/15733

рдЪреВрдВрдХрд┐ рд╣рдо q рдХреА рд╕рдЦреНрддреА рд╕реЗ рд╡реГрджреНрдзрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рд░рдгреА рдореЗрдВ np.maximum.accumulate рдкреБрдирдГ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рд╣рдо рд╕реАрдзреЗ NumPy рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╡рд╣рд╛рдБ рдХрд╣реАрдВ рднреА рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрджрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@glemaitre : рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрдкрд░реНрдпреБрдХреНрдд рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ, https://github.com/numpy/numpy/issues/14685#issuecomment -541467915

рдЕрд░реЗ, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд╕рд╛рде @ eric-wieser рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдЯреЗрдХреНрд╕рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕реНрдб рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реВрдВрдЧрд╛, рдпрд╛ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддрд╛ рд╣реИред
20191209_020250

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ quantile() рдореЗрдВ lerp рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ: inf рдорд╛рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, # 12282 рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Kreol64 picture Kreol64  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

qualiaa picture qualiaa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kevinzhai80 picture kevinzhai80  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marcocaccin picture marcocaccin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keithbriggs picture keithbriggs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ