Numpy: np.random.choice рдорд╛рд╕реНрдХреЗрдб рд╕рд░рдгреА рдкреНрд░реЛрдм рдкрд░ рд░реЗрдВрдЬ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд▓реМрдЯрддрд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЕрдЧре░ 2020  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

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 рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдирдХрд╛рдмрдкреЛрд╢ рд╕рд░рдгреА рдХрд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ = 4 рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ

00 - Bug numpy.ma numpy.random

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

рдпрд╣ рдЕрдВрдХ рднреА 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])

рдкрд╣рд▓реЗ рдореИрдВрдиреЗ "рдмрдЧ" рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдирд┐рд░реНрдгрдп рд╣реИред рд╕реБрдиреНрди рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдирдХрд╛рдмрдкреЛрд╢ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддреЗ (рдпрд╛ рдмреЗрд╣рддрд░, "рд╕рд╣реА рдврдВрдЧ рд╕реЗ", рдХреНрдпреЛрдВрдХрд┐ "рд╢реБрджреНрдзрддрд╛" рднреА рдПрдХ рдирд┐рд░реНрдгрдп рдХреЙрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ) рдЬрд╣рд╛рдВ рд╣рдо рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕реЗ рдмрдЧ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╡рд╛рдм "рдРрд╕рд╛ рдордд рдХрд░реЛ!" рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╣рдо рдирд┐рд░рд░реНрдердХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдирдХрд╛рдмрдкреЛрд╢ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдВрдЪ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдХреЛрдИ рднреА рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдХрд╛рдмрдкреЛрд╢ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдПрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ, рддрджрд░реНрде рдирд┐рд░реНрдзрд╛рд░рдг рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ Generator.choice __array_function__ рд▓рд┐рдП рдкреНрд░реЗрд╖рдг рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдиреНрдп рд╕рднреА "рдирдХрд╛рдмрдкреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╣реА рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ" рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ __array_function__ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдореИрдВрдиреЗ "рдмрдЧ" рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдирд┐рд░реНрдгрдп рд╣реИред рд╕реБрдиреНрди рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдирдХрд╛рдмрдкреЛрд╢ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддреЗ (рдпрд╛ рдмреЗрд╣рддрд░, "рд╕рд╣реА рдврдВрдЧ рд╕реЗ", рдХреНрдпреЛрдВрдХрд┐ "рд╢реБрджреНрдзрддрд╛" рднреА рдПрдХ рдирд┐рд░реНрдгрдп рдХреЙрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ) рдЬрд╣рд╛рдВ рд╣рдо рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕реЗ рдмрдЧ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╡рд╛рдм "рдРрд╕рд╛ рдордд рдХрд░реЛ!" рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╣рдо рдирд┐рд░рд░реНрдердХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдирдХрд╛рдмрдкреЛрд╢ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдВрдЪ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдХреЛрдИ рднреА рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдХрд╛рдмрдкреЛрд╢ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдПрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ, рддрджрд░реНрде рдирд┐рд░реНрдзрд╛рд░рдг рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирдХрд╛рдмрдкреЛрд╢ рдРрд░реЗ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдкрд╡рд╛рдж рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдЙрддреНрдкрд╛рджрди рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

__array_function__ рдореЗрдВ Generator __array_function__ рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рдЬрдмрдХрд┐ рдХрдИ рдмрд▓ рдЖрджрд╛рдиреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реА рд╕рдиреНрдирд┐рд╣рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╡рддрдГ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдЗрд╕ рдзрд╛рд░реНрдорд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдмрд▓ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк NPY_ARRAY_ENSUREARRAY рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдПрдХ ndarray рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реНрдг рд╣реИ рдФрд░ рдорд╛рд╕реНрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ "рд╕рд╣реА" рд╣реИред @WarrenWeckesser рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ pm=np.array([.1,.2,.3,.4]) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

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

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

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

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

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

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

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