import numpy as np
a = np.array([0.1, 0.2, 0.4, 0.3])
masked_a = np.ma.masked_array(a, [0, 0, 1, 1])
counter = np.zeros(len(a) + 1)
while True:
action = np.random.choice(len(a), p=masked_a)
counter[action] += 1
print(counter / counter.sum())
# [0.09931198 0.20076697 0. 0. 0.69992105]
์ธ๋ฑ์ค> 3์ ๋ฐํํด์๋ ์๋์ง๋ง ๋ง์คํน ๋ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๊ฐ ์ฐธ์ด๋ฉด index = 4๋ฅผ ๋ฐํ ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ numpy ๊ฐ๋ฐ ๋ฒ์ ์ Generator.choice
์์๋ ๋ฐ์ํฉ๋๋ค.
In [1]: import numpy as np
In [2]: np.__version__
Out[2]: '1.20.0.dev0+986e533'
In [3]: rng = np.random.default_rng()
In [4]: pm = np.ma.masked_array([0.1, 0.2, 0.4, 0.3], mask=[0, 0, 1, 1])
In [5]: rng.choice(4, p=pm, size=12)
Out[5]: array([4, 4, 4, 0, 4, 1, 4, 0, 0, 4, 4, 4])
์์ "๋ฒ๊ทธ"๋ผ๋ฒจ์ ์ถ๊ฐํ์ง๋ง ๊ทธ๊ฒ์ ์ฃผ๊ด์ ์ธ ํ๋จ์ ๋๋ค. numpy์๋ ๋ง์คํน ๋ ๋ฐฐ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ง ์๋ ๋ค๋ฅธ ํจ์๊ฐ ์์ต๋๋ค (๋๋ "์ ํ์ฑ"๋ ํ๋จ ํธ์ถ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ "์ฌ๋ฐ๋ฅด๊ฒ"). ์ฌ๊ธฐ์ ๋ฐ๋์ ๋ฒ๊ทธ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ ์ ์๋์ง ์์ ๋์์ ์์ผ ๋ฟ์ด๋ฉฐ ๋ฌธ์ ์ ๋ํ ์งง์ ๋๋ต์ "ํ์ง ๋ง์ธ์!"์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌด์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋์ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค๋ฉด ๋ ์ข์ ๊ฒ์ ๋๋ค.
๋ง์คํน ๋ ๋ฐฐ์ด์ ๋ํ ๋ช ์์ ์ธ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ์ด ์ค์ ๋ก ๋ง์คํน ๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ ๊ฐ๋จํ์ง๋ง ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์์ ์์ ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
Generator.choice
๊ฐ) __array_function__
๋ฐ์ก๋ฉ๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ์๋ง ๊ทธ๋ด ๊ฒ์
๋๋ค.
๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ์์ง __array_function__
๋ฒ๊ทธ๋ฅผ ๊ตฌํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ชจ๋ "maskedarray decay"์ ํจ๊ป ์ด๊ฒ์ ๋์ง๋ค ๊ณ ์๊ฐํฉ๋๋ค.
์์ "๋ฒ๊ทธ"๋ผ๋ฒจ์ ์ถ๊ฐํ์ง๋ง ๊ทธ๊ฒ์ ์ฃผ๊ด์ ์ธ ํ๋จ์ ๋๋ค. numpy์๋ ๋ง์คํน ๋ ๋ฐฐ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ง ์๋ ๋ค๋ฅธ ํจ์๊ฐ ์์ต๋๋ค (๋๋ "์ ํ์ฑ"๋ ํ๋จ ํธ์ถ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ "์ฌ๋ฐ๋ฅด๊ฒ"). ์ฌ๊ธฐ์ ๋ฐ๋์ ๋ฒ๊ทธ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ ์ ์๋์ง ์์ ๋์์ ์์ผ ๋ฟ์ด๋ฉฐ ๋ฌธ์ ์ ๋ํ ์งง์ ๋๋ต์ "ํ์ง ๋ง์ธ์!"์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌด์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋์ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค๋ฉด ๋ ์ข์ ๊ฒ์ ๋๋ค.
๋ง์คํน ๋ ๋ฐฐ์ด์ ๋ํ ๋ช ์์ ์ธ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ์ด ์ค์ ๋ก ๋ง์คํน ๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ ๊ฐ๋จํ์ง๋ง ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์์ ์์ ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ๋ง์คํฌ ๋ ๋ฐฐ์ด ์ ๋ฌ์ ํ์ฉํด์๋ ์๋์ง๋ง (์์ธ๋ฅผ ๋ฐ์์์ผ์ผ ํจ) ๋๋ถ๋ถ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค (์ผ๋ถ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ ์๋ํฉ๋๋ค). ํ๋ก๋์ ํ๊ฒฝ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Generator
์๋ __array_function__
์ฌ์ฉ์ด ์์ต๋๋ค. ๋ง์ ํ ์
๋ ฅ์ด C ์ฐ์์ ์ผ๋ก ์ ์๋ํ์ง๋ง, ์ผ๋ถ ๊ธฐ๋ฅ์ด ํญ์์ด๋ฅผ ์ข
๊ต์ ์ผ๋ก ์ถฉ๋ถํ ๊ฐ์ํ์ง๋ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
NPY_ARRAY_ENSUREARRAY
๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ๋ ์ฐจ์ ๋ง์คํฌ๋ฅผ ๋ฌด์ํ๋ ndarray๊ฐ๋ฉ๋๋ค. ์ด๊ฒ์ด "์ณ๋ค"๋ผ๊ณ ๋งํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. @WarrenWeckesser ์ ์์์๋ pm=np.array([.1,.2,.3,.4])
๋ฅผ ํ๋ฅ ๋ก ์ฌ์ฉํฉ๋๋ค.