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()
[์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ
์ฐธ ์ฐธ ์ฐธ ์ฐธ ์ฐธ ๊ฑฐ์ง ๊ฑฐ์ง ์ฐธ ์ฐธ ์ฐธ ์ฐธ ๊ฑฐ์ง ๊ฑฐ์ง
์ฐธ ์ฐธ ์ฐธ ๊ฑฐ์ง]
AssertionError Traceback (๊ฐ์ฅ ์ต๊ทผ ํธ์ถ ๋ง์ง๋ง)
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 equals_sorted = np.sort (q) == q
----> 3 assert equals_sorted.all ()
AssertionError :
1.17.2 3.6.8 (v3.6.8 : 3c6b436a57, 2018 ๋
12 ์ 24 ์ผ, 02:04:31)
[GCC 4.2.1 ํธํ Apple LLVM 6.0 (clang-600.0.57)]
์ ์ ๋ ฌ ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๊น? ๋ฐฑ๋ถ์ ์๋ ์์ ๋ณ์ด๋ฉฐ ์ถ๋ ฅ์ ์ ๋ ฅ ์์์ ๋๋ค.
์๋
ํ์ธ์ !
์ฌ์ค, ๋ฐฑ๋ถ์ ์๋ elmenet-wise์
๋๋ค. 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])
์ฌ๊ธฐ diff๋ฅผ ํตํด ์ ๋ ฌ๋์ง ์์์ ๋ณด์ฌ์ค๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์์๋ ์ผ์ด์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด lerp
์ฐ์ฐ (๋ณธ์ง์ ์ผ๋ก add(v_below*weights_below, v_above*weights_above)
)์ ์ํํ๋ ๋ค์ ๋ผ์ธ์ ์์ ์ฑ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ถ๋ ์์์ ๊ฐ์ ์ ํ์ผ๋ก ๋ณด๊ฐ ํ ๋ ์ฌ๋ฌ ๊ฐ์ง ์ ์ถฉ์์ด ์์ง๋ง ์ฌ๊ธฐ์ "์ฌ๋ฐ๋ฅธ"์ ํ์ด ์๋ค๊ณ ์๊ฐํ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ง๋ค์ง ์์์ต๋๋ค.
๋ ๋ง์ ๋ฐฐ๊ฒฝ ์ ๋ณด : https://math.stackexchange.com/questions/907327/accurate-floating-point-linear-interpolation
๋ค, ๋์ํฉ๋๋ค. ์์ ์ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ +1ํ์ฌ ์๊ฒฉํ๊ฒ ๋จ์กฐ๋กญ์ต๋๋ค (์ซ์). ๋ ๋์์ง ์๊ฑฐ๋ ์ ์ด๋ ๊ฑฐ์ ๋์ผํ ์ ๋ฐ๋๊ฐ ํ๋ช ํ๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์ถ๊ฐ ์์ / ์๋์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
ํธ์ง : ์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ก ํ์๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ํ์๋ ์๋ง๋ ํ์ด์ฌ ์ฝ๋ ๋ด์์ ์๋นํ ๊ฐ๋จํ ์ฌ๊ตฌ์ฑ ์ผ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ์ ๊ด์ฌ์ด ์์ต๋๋ค. ์คํจํ ์ฌ๋ก ์ค ์ผ๋ถ๋ฅผ ์ดํด๋ณด๊ณ ๋ชจ๋ ๋์ผํ ์ซ์ ์ฌ์ด์ ์ ํ ๋ณด๊ฐ์ด ํฌํจ๋์ด ์์์ ์์์ต๋๋ค. ์ฆ, Eric์ ์์์ ๊ทธ๊ฐ ๋์ดํ ๋ชจ๋ ๋ฐฑ๋ถ์ ์๋ 2 ๊ฐ์ 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, a, t) = a)์ด๋ผ๋ ์์ฑ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ธฐ๋ฅ ์๊ตฌ ์ฌํญ์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ํจ์์ ์ฃผ์ ๋จ์ ์ค ํ๋๋ lerp (a, b, 1)! = b์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ด 0 <= t <1์ ๋ณด์ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ํจ์์ ์ฃผ์ ๋จ์ ์ค ํ๋๋ lerp (a, b, 1)! = b์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ด 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 : numpy์ ๋ชจ๋ ๊ด๋ จ ์ค์ ์์ ๋ด ์๊ฒฌ ( https://github.com/numpy/numpy/issues/14685#issuecomment -541467915)์ ๋งํฌ๋์ด ์์ต๋๋ค.
์๋
ํ์ธ์, @ eric-wieser๊ฐ ์ ๊ณต ํ stackexchange ๋ต๋ณ ์ค ํ๋์ ์ข์ ๋์ฒด ๋ณด๊ฐ๋ฒ์ด์๋ ์
๋ฐ์ดํธ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ ๋์๋ ๋จ์กฐ๋ก์ด ์ฆ๊ฑฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์ ๋ ์์ ์ ์ธ๊ธ ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ์ ๋ํด ์๋ฏธ๊ฐ ์๋ค๋ฉด, ์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ผ๋ก ๊ตฌํํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ด ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
quantile()
lerp์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. inf ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. # 12282๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์, @ eric-wieser๊ฐ ์ ๊ณต ํ stackexchange ๋ต๋ณ ์ค ํ๋์ ์ข์ ๋์ฒด ๋ณด๊ฐ๋ฒ์ด์๋ ์ ๋ฐ์ดํธ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ ๋์๋ ๋จ์กฐ๋ก์ด ์ฆ๊ฑฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์ ๋ ์์ ์ ์ธ๊ธ ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ์ ๋ํด ์๋ฏธ๊ฐ ์๋ค๋ฉด, ์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ผ๋ก ๊ตฌํํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ด ์๋ํด ๋ณผ ์ ์์ต๋๋ค.