Numpy: NEP-18 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛ (__array_function__)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рд╕рд┐рддре░ 2018  ┬╖  54рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

  • [x] рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛:

    • [x] рд╢реБрджреНрдз рдкрд╛рдпрдерди рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (# 12005)

    • [x] array_function_dispatch (https://github.com/numpy/numpy/pull/12099) рдореЗрдВ рдорд╛рдиреНрдп рдбрд┐рд╕реНрдкреИрдЪрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕



      • NumPy рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдЕрдХреНрд╖рдо рдХрд░реЗрдВ (рдпрджрд┐ рдЖрдпрд╛рдд рд╕рдордп рдкрд░ рдПрдХ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ) (рдЕрдирд╛рд╡рд╢реНрдпрдХ)



    • [x] __array_function__ рдкреНрд░реЗрд╖рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП .__skip_array_function__ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред (Https://github.com/numpy/numpy/pull/13389)

  • [x] рдЧрддрд┐ рдХреЗ рд▓рд┐рдП numpy/core/overrides.py C рдХреЗ рднрд╛рдЧреЛрдВ (https://github.com/numpy/numpy/issues/12028) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

    • [x] get_overloaded_types_and_args

    • [x] array_function_implementation_or_override

    • [x] ndarray.__array_function__ ?

    • [x] array_function_dispatch ?

  • [x] рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NumPy рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ

    • [x] numpy.core



      • [x] рдЖрд╕рд╛рди рд╣рд┐рд╕реНрд╕рд╛ (https://github.com/numpy/numpy/pull/12115)


      • [x] np.core.defchararray (# 12154)


      • [x] np.einsum рдФрд░ np.block (https://github.com/numpy/numpy/pull/12163)



    • [x] numpy.lib



      • [x] рднрд╛рдЧ рез (https://github.com/numpy/numpy/pull/12116)


      • [x] рднрд╛рдЧ реи (# резреирезрез реп)



    • [x] numpy.fft / numpy.linalg (https://github.com/numpy/numpy/pull/12117)

    • [x] рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ C рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ : рдЦрд╛рд▓реА_ рддрд░рд╣, рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдЖрдВрддрд░рд┐рдХ, рдЬрд╣рд╛рдБ, lexsort, can_cast, min_scalar_type, result_type, dot, vdot, is_busday, busday_offset, busday_count, datetime_as_string (https://github.com/nump/nump/ рдкреБрд▓ / 12175)

    • [x] рд▓рд┐рдиреНрд╕рд╕реНрдкреЗрд╕

    • [] [ arange? ] (https://github.com/numpy/numpy/issues/12379)

  • [x] рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░

    • [x] [рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢] (https://github.com/numpy/numpy/issues/12213) рдЕрдирдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП (https://github.com/numpy/numpy/pull/12251)

    • [x] ndarray.__repr__ рдХреЛ __array_function__ (https://github.com/numpy/numpy/pull/12212) рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

    • [x] рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП stacklevel рдХреЛ 1 рд╕реЗ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЯреНрд░реЗрд╕рдмреИрдХ рд╕рд╣реА рдЬрдЧрд╣ (gh-13329) рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ

  • [x] рд╕рднреА рдЬреНрдЮрд╛рдд рдмрдЧ / рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВ
  • [] рдкреНрд░рд▓реЗрдЦрди

    • [x] рдЬрд╛рд░реА рдиреЛрдЯ (# резреирежреи ()

    • [x] рдиреИрд░реЗрдЯрд┐рд╡ рдбреЙрдХреНрд╕

    • [] рдУрд╡рд░рд▓реЛрдб рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕?

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

рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ np.array рдХрд╛ рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрднреА рднреА 100% рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдирдИрдкреА 22 рдореЗрдВ рдпрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо numpy.ndarray рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП np.asarray() рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ np.asarray() рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рдиреАрдЪреЗ numpy.ndarray рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рд░рдгреА рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдкрд╣рд▓реВ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рджрд░реНрд╢рди / рдЬрдЯрд┐рд▓рддрд╛ рдЯреНрд░реЗрдбрдСрдл рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдЪреАрд▓рд╛рдкрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдБред NEP 18 рдХреЛ рдбреНрд░реЙрдк-рдЗрди NumPy рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реИред

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

рдХреБрдЫ рд╣рд╛рдИ-рдкреНрд░реЛрдлрд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ "рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ NumPy рдХрд╛рд░реНрдпреЛрдВ рдХреЛ @array_function_dispatch" рдХреЗ рд╕рд╛рде рдорд░реНрдЬ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рд╕реЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо https://github.com/numpy/numpy/pull/12099 рдХреЛ рдорд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ numpy.core рд▓рд┐рдП рдкреНрд░реЗрд╖рдг рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдЪреАрдЬреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - рдпрд╣ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рд▓реЗрддрд╛ рд╣реИред

cc @ eric-wieser @mrocklin @mhvk @hameerabbasi

рдореЗрд░реА рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП https://github.com/shoyer/numpy/tree/array-function-easy-impl рджреЗрдЦреЗрдВ рдЬреЛ рдкрд╛рдпрдерди рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕рднреА "рдЖрд╕рд╛рди" рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдмрдЪреЗ рд╣реБрдП рднрд╛рдЧ np.block , np.einsum рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ C (рдЬреИрд╕реЗ, np.concatenate ) рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╣рдо # 12099 рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдкреАрдЖрд░ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рджреЗрдВрдЧреЗред

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

@shoyer - рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реБрдиреНрди рдХреЗ рднреАрддрд░, рдпрд╣ MaskedArray рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрд▓реНрджреА рдУрд╡рд░рд░рд╛рдЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭрджрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@ mhvk рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рджреЗрддрд╛ / рдЬрд╛рдирддрд╛ рд╣реВрдВ рдЬреЛ рдорд╛рд╕реНрдХрд╕реЗрд░реНрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

Https://github.com/numpy/numpy/pull/12115 , https://github.com/numpy/numpy/pull/12116 , # 12119 рдФрд░ https://github.com/numpy/numpy/null/ рджреЗрдЦреЗрдВ 12117 рдкрд╛рдпрдерди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдкрд░ __array_function__ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреАрдЖрд░рдПрд╕ рдХреЗ рд▓рд┐рдПред

@ рд╢рд╛рдпрд░ - рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рджреЛ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ:

  • рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, reshape , рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдиреЗ рдкрд╣рд▓реЗ рд╣реА reshape рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкрджрд╛рд╡рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ __array_function__ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, np.median , np.asanyarray рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдФрд░ ufuncs рдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЙрдкрд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдм рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпреЗ рджреЛ рдЪреАрдЬреЗрдВ рд╕рдВрднрд╡рддрдГ рд▓рд╛рдн рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢реБрджреНрдз ndarray рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╛рдж рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ ndarray.__array_function__ рдХреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐ред ndarray , рддрд╛рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХреЗрдВ)ред рдлрд┐рд░ рднреА, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдиреЛрдЯ рдХрд░реВрдБрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдореБрдЭреЗ Quantity рд▓рд┐рдП рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рднрдп рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рджреЛрдиреЛрдВ - рдХрд╛рдо рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╣рд┐рдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ ndarray .__ array_function__ рдХреЛ ndarray рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реВрдЪрд┐рдпрд╛рдБ рдЖрджрд┐ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХреЗрдВ)ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ reshape рдФрд░ mean рдЬреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреБрд░рд╛рдирд╛ рддрд░реАрдХрд╛ рдЕрднреА рднреА NumPy рдХреЗ API рдХреЗ рдЕрдзреВрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдПрдХ рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП __array_function__ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд┐рдЫрд▓реЗ рддрдВрддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╕рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ NotImplementedButCoercible рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред

@hameerabbasi - рд╣рд╛рдБ, рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдбрдХреНрдЯ-рдЯреЗрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗ ... (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА "рд╕рдорд╕реНрдпрд╛рдПрдВ" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд╛рдн рд╣реЛ рд╕рдХрддреА рд╣реИрдВ ...) ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ 1.16 рдореЗрдВ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрднрд╡ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реБрдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо "рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП" рдореЗрд░реЗ __array_function__ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдкреБрди :: рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ: рд╢реИрд▓реА рдкрд░ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рд╕реНрдореГрддрд┐ / рдЖрдпрд╛рдд рд╕рдордп рдХреЗ рд╡рд┐рдЪрд╛рд░, рдФрд░ рд╡рд╛рдЪрд╛рд▓рддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдХрд╛рдлреА рдмрд╕, рдЙрди рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рдорд░реНрдЬ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рди рд░рд╣рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреИрд╢ рд╣рд┐рдЯ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рднреА рд▓рдВрдмреЛрджрд░ рд╢реИрд▓реА рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдбрд┐рд╕реНрдкреИрдЪрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рд╢реИрд▓реА рдЕрдм рдХреБрдЫ рдкреАрдЖрд░ рдореЗрдВ рдЖ рдЧрдИ рд╣реИред NumPy рдореЗрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:


рд╡рд┐рдХрд▓реНрдк 1 : рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбрд┐рд╕реНрдкреИрдЪрд░ рд▓рд┐рдЦреЗрдВ, рдЬреИрд╕реЗ,

def _sin_dispatcher(a):
    return (a,)


@array_function_dispatch(_sin_dispatcher)
def sin(a):
     ...


def _cos_dispatcher(a):
    return (a,)


@array_function_dispatch(_cos_dispatcher)
def cos(a):
    ...

рд▓рд╛рдн:

  • рдмрд╣реБрдд рдкрдардиреАрдп рд╣реИ
  • рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ
  • рдЬрдм рдЖрдк рдЧрд▓рдд рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕рд╛рдл рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sin(x=1) -> TypeError: _sin_dispatcher() got an unexpected keyword argument 'x' ред

рдиреБрдХрд╕рд╛рди:

  • рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдИ рдлрд╝рдВрдХреНрд╢рди рдареАрдХ рдЙрд╕реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк 2 : рдкреБрди: рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░, рдЬреИрд╕реЗ,

def _unary_dispatcher(a):
    return (a,)


@array_function_dispatch(_unary_dispatcher)
def sin(a):
     ...


@array_function_dispatch(_unary_dispatcher)
def cos(a):
    ...

рд▓рд╛рдн:

  • рдХрдо рджреЛрд╣рд░рд╛рд╡
  • рдкрдардиреАрдп

рдиреБрдХрд╕рд╛рди:

  • рдкреНрд░реЗрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рдЦрд░рд╛рдм рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рдЬреИрд╕реЗ, sin(x=1) -> TypeError: _unary_dispatcher() got an unexpected keyword argument 'x'

рд╡рд┐рдХрд▓реНрдк 3 : рдЬрдм рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рд╣реЛрдЧреА, рдЬреИрд╕реЗ lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ;

# inline style (shorter)
@array_function_dispatch(lambda a: (a,))
def sin(a):
     ...


@array_function_dispatch(lambda a, n=None, axis=None, norm=None: (a,))
def fft(a, n=None, axis=-1, norm=None):
     ...
# multiline style (more readable?)
@array_function_dispatch(
    lambda a: (a,)
)
def sin(a):
     ...


@array_function_dispatch(
    lambda a, n=None, axis=None, norm=None: (a,)
)
def fft(a, n=None, axis=-1, norm=None):
     ...

рд▓рд╛рдн:

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

рдиреБрдХрд╕рд╛рди:

  • рд╡рд┐рдХрд▓реНрдк 2 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреЛрдбред
  • рдХреБрдЫ рддрд░реНрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд▓рдЧ рд░рд╣рд╛ рд╣реИ
  • рдХрдо рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреА рд╣реИрдВ ( TypeError: <lambda>() got an unexpected keyword argument 'x' )

@shoyer : "рд▓рд╛рдЗрдиреЛрдВ рдХреА рдХреЛрдб" рдкрд╣рд▓реВ рдХреЛ рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ-рдкрдВрдХреНрддрд┐ PEP8 рд░рд┐рдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдЧрдард┐рдд рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреБрдЫ рдЖрдпрд╛рдд-рд╕рдордп рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдЖрдПрдЧрд╛ред рд╢рд╛рдпрдж рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @nschloe рдХреЗ рдЯреВрдирд╛ рдХреЛ

рд╣рд╛рдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдирд╛рдордЯреВрдкрд▓ рдХреА рддрд░рд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ рдХрд┐ рдпрд╣ exec() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

рдЬрдм рддрдХ рддреНрд░реБрдЯрд┐ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЫрдбрд╝реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рд╣реИред рдореИрдВ рд╕реНрдореГрддрд┐ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рде (2) рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рдмрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрдм рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ _dispatch_on_x рддрд░рд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рдкрд╛рда рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рд╕рд╛рде <lambda> рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред (рдпрд╛ рд╡рд╣ рдЪреЗрди рдЗрди рджрд┐рдиреЛрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ?)

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

https://github.com/numpy/numpy/pull/12175 рдорд▓реНрдЯреАрдПрд░реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЬреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдПрдХ рдбреНрд░рд╛рдлреНрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ) рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо рдкрд╛рдпрдерди рд░реИрдкрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддреЗ рд╣реИрдВред

@ рдореИрдЯреНрдЯрд┐рдк рд╣рдо matmul рдХреЛ рдПрдХ ufunc рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХрд╣рд╛рдБ рд╣реИрдВ? рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЗрди рд╕рднреА __array_function__ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдкреВрд░рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ NumPy рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рднрд╛рд░ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдВрддрд┐рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рднреА NumPy 1.16 рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдП!

PR # 11175, рдЬреЛ NEP 20 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ PR # 11133 рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд░реЛрдзрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ matmul рд▓реВрдк рдХреЛрдб рд╣реИред рдЙрд╕ рдПрдХ рдХреЛ рдЕрднреА рднреА рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рдХреЛрдб рдкреБрд░рд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдкреАрдЖрд░рдПрд╕ рд╣реИрдВ рдЬреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдкреВрд░реНрдг рд╕реЗрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрддрд┐рдо рд╕рдореАрдХреНрд╖рд╛ / рд╕рд╛рдЗрдирдСрдлрд╝ / рдорд░реНрдЬ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА рддрд╛рдХрд┐ рд╣рдо рдмрдпрд╛рдирд╛ рдореЗрдВ __array_function__ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВ! https://github.com/numpy/numpy/pull/12154 , https://github.com/numpy/numpy/pull/12163 , https://github.com/numpy/numpy/pull/12119 , https: //github.com/numpy/numpy/pull/12175

рдУрд╡рд░рд░рд╛рдЗрдбреНрд╕ рдХреЛ np.core рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреБрдЫ рдкрд╛рдВрдбрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП (https://github.com/pandas-dev/pandas/issues/23172)ред рд╣рдо рдЕрднреА рддрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

Https://github.com/numpy/numpy/issues/12225 рдкрд░ рдореЗрд░реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдбрд╕реНрдХ / рдкрд╛рдВрдбрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпреЛрдВ рдмрди рд░рд╣рд╛ рд╣реИред

рдЖрдпрд╛рдд рд╕рдордп рдХреЗ рдХреБрдЫ рдорд╛рдирджрдВрдб (рдореЗрд░реА рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдкрд░ рдПрдХ рдареЛрд╕ рд░рд╛рдЬреНрдп рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рд╛рде):

  • NumPy 1.15.2: 152.451 рдПрдордПрд╕
  • рдиреНрдпреВрдореНрдкреА рдорд╛рд╕реНрдЯрд░: 156.5745 рдПрдордПрд╕
  • decorator.decorate (# 12226) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: 183.694 рдПрдордПрд╕

рдореЗрд░реА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

import numpy as np
import subprocess

times = []
for _ in range(100):
    result = subprocess.run("python -X importtime -c 'import numpy'",
                            shell=True, capture_output=True)
    last_line = result.stderr.rstrip().split(b'\n')[-1]
    time = float(last_line.decode('ascii')[-15:-7].strip().rstrip())
    times.append(time)

print(np.median(times) / 1e3)

рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ (рдкрд╣рд▓реЗ / рдмрд╛рдж)? рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ IoT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХреИрд╕реЗ рдорд╛рдкреЗрдВ?
рд╕рдд, 20 рдЕрдХреНрдЯреВрдмрд░, 2018 рдХреЛ рд╕реБрдмрд╣ 6:56 рдмрдЬреЗ рд╣рдореАрд░ рдЕрдмреНрдмрд╛рд╕реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ (рдкрд╣рд▓реЗ / рдмрд╛рдж)? рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ IoT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/12028#issuecomment-431584123 , рдпрд╛ рдореНрдпреВрдЯ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/ABKS1k_IkrJ2YmYReaDrnkNvcH2X0-ZCks5umyuogaJpZM4W3kSC
ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрд▓реАрдк рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдореЛрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП import numpy as np рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред https://superuser.com/questions/581108/how-can-i-track-and-log-cpu-and-memory-usage-on-a-mac

рдХреЛрдИ рдЕрдиреНрдп рдХреЛрд░ рджреЗрд╡рддрд╛ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ!) Https://github.com/numpy/numpy/pull/12163 рдкрд░ рдпрд╣ рдЕрдВрддрд┐рдо рдкреАрдЖрд░ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд╕реБрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП array_function_dispatch рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ __array_function__ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЧрдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░:

       before           after         ratio
     [45718fd7]       [4e5aa2cd]
     <master>         <disable-array-function>
+        72.5┬▒2ms         132┬▒20ms     1.82  bench_io.LoadtxtCSVdtypes.time_loadtxt_dtypes_csv('complex128', 10000)
-        44.9┬▒2╬╝s       40.8┬▒0.6╬╝s     0.91  bench_ma.Concatenate.time_it('ndarray', 2)
-      15.3┬▒0.3╬╝s       13.3┬▒0.7╬╝s     0.87  bench_core.CountNonzero.time_count_nonzero_multi_axis(2, 100, <type 'object'>)
-        38.4┬▒1╬╝s         32.7┬▒2╬╝s     0.85  bench_linalg.Linalg.time_op('norm', 'longfloat')
-        68.7┬▒3╬╝s         56.5┬▒3╬╝s     0.82  bench_linalg.Linalg.time_op('norm', 'complex256')
-        80.6┬▒4╬╝s         65.9┬▒1╬╝s     0.82  bench_function_base.Median.time_even
-        82.4┬▒2╬╝s         66.8┬▒3╬╝s     0.81  bench_shape_base.Block.time_no_lists(100)
-        73.5┬▒3╬╝s         59.3┬▒3╬╝s     0.81  bench_function_base.Median.time_even_inplace
-      15.2┬▒0.3╬╝s       12.2┬▒0.6╬╝s     0.80  bench_core.CountNonzero.time_count_nonzero_multi_axis(3, 100, <type 'str'>)
-      2.20┬▒0.1ms      1.76┬▒0.04ms     0.80  bench_shape_base.Block2D.time_block2d((1024, 1024), 'uint64', (4, 4))
-        388┬▒20╬╝s         310┬▒10╬╝s     0.80  bench_lib.Pad.time_pad((10, 10, 10), 3, 'linear_ramp')
-        659┬▒20╬╝s         524┬▒20╬╝s     0.80  bench_linalg.Linalg.time_op('det', 'float32')
-      22.9┬▒0.7╬╝s       18.2┬▒0.8╬╝s     0.79  bench_function_base.Where.time_1
-        980┬▒50╬╝s         775┬▒20╬╝s     0.79  bench_shape_base.Block2D.time_block2d((1024, 1024), 'uint32', (4, 4))
-        36.6┬▒1╬╝s         29.0┬▒1╬╝s     0.79  bench_ma.Concatenate.time_it('unmasked', 2)
-      16.4┬▒0.7╬╝s       12.9┬▒0.6╬╝s     0.79  bench_core.CountNonzero.time_count_nonzero_axis(3, 100, <type 'str'>)
-      16.4┬▒0.5╬╝s       12.9┬▒0.4╬╝s     0.79  bench_core.CountNonzero.time_count_nonzero_axis(2, 100, <type 'object'>)
-         141┬▒5╬╝s          110┬▒4╬╝s     0.78  bench_lib.Pad.time_pad((10, 100), (0, 5), 'linear_ramp')
-      18.0┬▒0.6╬╝s       14.1┬▒0.6╬╝s     0.78  bench_core.CountNonzero.time_count_nonzero_axis(3, 100, <type 'object'>)
-      11.9┬▒0.6╬╝s       9.28┬▒0.5╬╝s     0.78  bench_core.CountNonzero.time_count_nonzero_axis(1, 100, <type 'int'>)
-        54.6┬▒3╬╝s         42.4┬▒2╬╝s     0.78  bench_function_base.Median.time_odd_small
-        317┬▒10╬╝s          246┬▒7╬╝s     0.78  bench_lib.Pad.time_pad((10, 10, 10), 1, 'linear_ramp')
-      13.8┬▒0.5╬╝s       10.7┬▒0.7╬╝s     0.77  bench_reduce.MinMax.time_min(<type 'numpy.float64'>)
-        73.3┬▒6╬╝s         56.6┬▒4╬╝s     0.77  bench_lib.Pad.time_pad((1000,), (0, 5), 'mean')
-      14.7┬▒0.7╬╝s       11.4┬▒0.3╬╝s     0.77  bench_core.CountNonzero.time_count_nonzero_axis(2, 100, <type 'str'>)
-        21.5┬▒2╬╝s       16.5┬▒0.6╬╝s     0.77  bench_reduce.MinMax.time_min(<type 'numpy.int64'>)
-         117┬▒4╬╝s         89.2┬▒3╬╝s     0.76  bench_lib.Pad.time_pad((1000,), 3, 'linear_ramp')
-        43.7┬▒1╬╝s         33.4┬▒1╬╝s     0.76  bench_linalg.Linalg.time_op('norm', 'complex128')
-      12.6┬▒0.6╬╝s       9.55┬▒0.2╬╝s     0.76  bench_core.CountNonzero.time_count_nonzero_multi_axis(2, 100, <type 'int'>)
-        636┬▒20╬╝s         482┬▒20╬╝s     0.76  bench_ma.MA.time_masked_array_l100
-        86.6┬▒4╬╝s         65.6┬▒4╬╝s     0.76  bench_lib.Pad.time_pad((1000,), (0, 5), 'linear_ramp')
-         120┬▒4╬╝s         90.4┬▒2╬╝s     0.75  bench_lib.Pad.time_pad((1000,), 1, 'linear_ramp')
-         160┬▒5╬╝s          119┬▒8╬╝s     0.74  bench_ma.Concatenate.time_it('ndarray+masked', 100)
-      14.4┬▒0.6╬╝s       10.7┬▒0.3╬╝s     0.74  bench_core.CountNonzero.time_count_nonzero_multi_axis(1, 100, <type 'str'>)
-      15.7┬▒0.4╬╝s       11.7┬▒0.6╬╝s     0.74  bench_core.CountNonzero.time_count_nonzero_multi_axis(2, 100, <type 'str'>)
-        21.8┬▒2╬╝s       16.1┬▒0.7╬╝s     0.74  bench_reduce.MinMax.time_max(<type 'numpy.int64'>)
-      11.9┬▒0.6╬╝s       8.79┬▒0.3╬╝s     0.74  bench_core.CountNonzero.time_count_nonzero_axis(2, 100, <type 'bool'>)
-        53.8┬▒3╬╝s         39.4┬▒2╬╝s     0.73  bench_function_base.Median.time_even_small
-        106┬▒20╬╝s         76.7┬▒4╬╝s     0.73  bench_function_base.Select.time_select
-        168┬▒10╬╝s          122┬▒4╬╝s     0.72  bench_shape_base.Block2D.time_block2d((512, 512), 'uint32', (2, 2))
-      12.5┬▒0.5╬╝s       8.96┬▒0.4╬╝s     0.72  bench_core.CountNonzero.time_count_nonzero_multi_axis(1, 100, <type 'int'>)
-        162┬▒10╬╝s          115┬▒5╬╝s     0.71  bench_function_base.Percentile.time_percentile
-        12.9┬▒1╬╝s       9.12┬▒0.4╬╝s     0.71  bench_random.Random.time_rng('normal')
-      9.71┬▒0.4╬╝s       6.88┬▒0.3╬╝s     0.71  bench_core.CorrConv.time_convolve(1000, 10, 'full')
-      15.1┬▒0.8╬╝s       10.7┬▒0.4╬╝s     0.71  bench_reduce.MinMax.time_max(<type 'numpy.float64'>)
-         153┬▒9╬╝s          108┬▒7╬╝s     0.71  bench_shape_base.Block2D.time_block2d((1024, 1024), 'uint8', (2, 2))
-         109┬▒5╬╝s         76.9┬▒5╬╝s     0.71  bench_ma.Concatenate.time_it('ndarray+masked', 2)
-        34.3┬▒1╬╝s       24.2┬▒0.6╬╝s     0.71  bench_linalg.Linalg.time_op('norm', 'complex64')
-      9.80┬▒0.2╬╝s       6.84┬▒0.5╬╝s     0.70  bench_core.CorrConv.time_convolve(1000, 10, 'same')
-        27.4┬▒6╬╝s         19.1┬▒2╬╝s     0.70  bench_core.CountNonzero.time_count_nonzero_axis(1, 10000, <type 'bool'>)
-      9.35┬▒0.4╬╝s       6.50┬▒0.3╬╝s     0.70  bench_core.CorrConv.time_convolve(50, 100, 'full')
-        65.2┬▒4╬╝s         45.2┬▒1╬╝s     0.69  bench_shape_base.Block.time_block_simple_row_wise(100)
-        12.9┬▒1╬╝s       8.89┬▒0.3╬╝s     0.69  bench_core.CountNonzero.time_count_nonzero_axis(3, 100, <type 'bool'>)
-        19.6┬▒3╬╝s       13.5┬▒0.4╬╝s     0.69  bench_core.CountNonzero.time_count_nonzero_multi_axis(3, 100, <type 'object'>)
-        75.6┬▒2╬╝s         52.1┬▒3╬╝s     0.69  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'reflect')
-        12.4┬▒1╬╝s       8.51┬▒0.4╬╝s     0.69  bench_core.CountNonzero.time_count_nonzero_multi_axis(3, 100, <type 'bool'>)
-        172┬▒30╬╝s          117┬▒4╬╝s     0.68  bench_ma.Concatenate.time_it('unmasked+masked', 100)
-      23.1┬▒0.5╬╝s       15.8┬▒0.9╬╝s     0.68  bench_linalg.Linalg.time_op('norm', 'int16')
-      8.18┬▒0.9╬╝s       5.57┬▒0.1╬╝s     0.68  bench_core.CorrConv.time_correlate(1000, 10, 'full')
-         153┬▒5╬╝s          103┬▒3╬╝s     0.68  bench_function_base.Percentile.time_quartile
-       758┬▒100╬╝s         512┬▒20╬╝s     0.68  bench_linalg.Linalg.time_op('det', 'int16')
-        55.4┬▒6╬╝s         37.4┬▒1╬╝s     0.68  bench_ma.Concatenate.time_it('masked', 2)
-        234┬▒30╬╝s          157┬▒5╬╝s     0.67  bench_shape_base.Block.time_nested(100)
-         103┬▒4╬╝s         69.3┬▒3╬╝s     0.67  bench_linalg.Eindot.time_dot_d_dot_b_c
-      19.2┬▒0.4╬╝s       12.9┬▒0.6╬╝s     0.67  bench_core.Core.time_tril_l10x10
-         122┬▒7╬╝s         81.7┬▒4╬╝s     0.67  bench_lib.Pad.time_pad((10, 10, 10), 3, 'edge')
-        22.9┬▒1╬╝s       15.3┬▒0.5╬╝s     0.67  bench_linalg.Linalg.time_op('norm', 'int32')
-        16.6┬▒2╬╝s       11.0┬▒0.3╬╝s     0.66  bench_core.CountNonzero.time_count_nonzero_multi_axis(1, 100, <type 'object'>)
-      9.98┬▒0.3╬╝s       6.58┬▒0.1╬╝s     0.66  bench_core.CorrConv.time_convolve(1000, 10, 'valid')
-         118┬▒6╬╝s         77.9┬▒4╬╝s     0.66  bench_shape_base.Block2D.time_block2d((512, 512), 'uint16', (2, 2))
-        212┬▒50╬╝s          140┬▒8╬╝s     0.66  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'mean')
-      21.9┬▒0.7╬╝s       14.4┬▒0.5╬╝s     0.66  bench_linalg.Linalg.time_op('norm', 'int64')
-         131┬▒5╬╝s         85.9┬▒5╬╝s     0.65  bench_lib.Pad.time_pad((10, 10, 10), 3, 'constant')
-        56.8┬▒2╬╝s         37.0┬▒3╬╝s     0.65  bench_lib.Pad.time_pad((1000,), (0, 5), 'constant')
-        58.9┬▒3╬╝s         38.1┬▒1╬╝s     0.65  bench_lib.Pad.time_pad((10, 100), (0, 5), 'reflect')
-        72.1┬▒2╬╝s         46.5┬▒3╬╝s     0.64  bench_lib.Pad.time_pad((10, 100), (0, 5), 'constant')
-      8.66┬▒0.3╬╝s       5.58┬▒0.2╬╝s     0.64  bench_core.CorrConv.time_correlate(50, 100, 'full')
-        300┬▒30╬╝s         193┬▒10╬╝s     0.64  bench_shape_base.Block2D.time_block2d((1024, 1024), 'uint8', (4, 4))
-        15.9┬▒5╬╝s       10.2┬▒0.3╬╝s     0.64  bench_core.CountNonzero.time_count_nonzero_axis(3, 100, <type 'int'>)
-      13.7┬▒0.5╬╝s       8.80┬▒0.1╬╝s     0.64  bench_random.Random.time_rng('uniform')
-      8.60┬▒0.5╬╝s       5.50┬▒0.2╬╝s     0.64  bench_core.CorrConv.time_correlate(1000, 10, 'same')
-        44.7┬▒2╬╝s       28.5┬▒0.7╬╝s     0.64  bench_lib.Pad.time_pad((1000,), 1, 'reflect')
-        72.7┬▒3╬╝s         46.2┬▒2╬╝s     0.64  bench_lib.Pad.time_pad((10, 10, 10), 3, 'wrap')
-        567┬▒50╬╝s         360┬▒40╬╝s     0.63  bench_shape_base.Block2D.time_block2d((512, 512), 'uint64', (2, 2))
-        58.0┬▒3╬╝s         36.7┬▒2╬╝s     0.63  bench_lib.Pad.time_pad((10, 100), 3, 'reflect')
-        219┬▒30╬╝s          138┬▒7╬╝s     0.63  bench_lib.Pad.time_pad((10, 100), 1, 'mean')
-        261┬▒60╬╝s         164┬▒10╬╝s     0.63  bench_lib.Pad.time_pad((10, 100), 1, 'linear_ramp')
-       825┬▒100╬╝s         519┬▒30╬╝s     0.63  bench_shape_base.Block2D.time_block2d((512, 512), 'uint64', (4, 4))
-         121┬▒5╬╝s         75.7┬▒2╬╝s     0.63  bench_lib.Pad.time_pad((10, 10, 10), 1, 'constant')
-      8.16┬▒0.2╬╝s       5.08┬▒0.4╬╝s     0.62  bench_core.CorrConv.time_convolve(50, 100, 'same')
-        66.6┬▒3╬╝s         41.3┬▒2╬╝s     0.62  bench_lib.Pad.time_pad((1000,), 3, 'constant')
-        53.1┬▒3╬╝s       32.9┬▒0.8╬╝s     0.62  bench_lib.Pad.time_pad((10, 100), 3, 'wrap')
-        285┬▒60╬╝s         177┬▒10╬╝s     0.62  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'linear_ramp')
-      8.30┬▒0.9╬╝s       5.14┬▒0.1╬╝s     0.62  bench_core.CorrConv.time_correlate(1000, 10, 'valid')
-         115┬▒3╬╝s         71.2┬▒3╬╝s     0.62  bench_shape_base.Block2D.time_block2d((256, 256), 'uint64', (2, 2))
-      19.1┬▒0.5╬╝s       11.8┬▒0.6╬╝s     0.62  bench_linalg.Linalg.time_op('norm', 'float64')
-        95.3┬▒5╬╝s         58.6┬▒2╬╝s     0.62  bench_lib.Pad.time_pad((10, 100), 1, 'constant')
-        44.6┬▒1╬╝s       27.2┬▒0.9╬╝s     0.61  bench_lib.Pad.time_pad((1000,), (0, 5), 'edge')
-        447┬▒20╬╝s         270┬▒10╬╝s     0.61  bench_shape_base.Block2D.time_block2d((1024, 1024), 'uint16', (4, 4))
-        53.9┬▒2╬╝s         32.6┬▒2╬╝s     0.60  bench_lib.Pad.time_pad((10, 100), 1, 'wrap')
-        11.6┬▒1╬╝s       6.97┬▒0.4╬╝s     0.60  bench_reduce.MinMax.time_max(<type 'numpy.float32'>)
-        95.9┬▒5╬╝s         57.7┬▒2╬╝s     0.60  bench_lib.Pad.time_pad((10, 100), 3, 'constant')
-        47.2┬▒2╬╝s         28.2┬▒2╬╝s     0.60  bench_lib.Pad.time_pad((1000,), (0, 5), 'reflect')
-      5.51┬▒0.2╬╝s      3.27┬▒0.07╬╝s     0.59  bench_core.CountNonzero.time_count_nonzero(3, 100, <type 'object'>)
-        74.3┬▒3╬╝s         44.0┬▒2╬╝s     0.59  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'wrap')
-        76.2┬▒3╬╝s       45.0┬▒0.8╬╝s     0.59  bench_lib.Pad.time_pad((10, 10, 10), 1, 'reflect')
-        57.1┬▒1╬╝s         33.5┬▒2╬╝s     0.59  bench_lib.Pad.time_pad((10, 100), (0, 5), 'wrap')
-        52.0┬▒2╬╝s         30.4┬▒1╬╝s     0.58  bench_lib.Pad.time_pad((1000,), 1, 'edge')
-        42.6┬▒2╬╝s       24.9┬▒0.9╬╝s     0.58  bench_lib.Pad.time_pad((1000,), 3, 'wrap')
-        15.0┬▒3╬╝s       8.73┬▒0.3╬╝s     0.58  bench_core.CountNonzero.time_count_nonzero_multi_axis(1, 100, <type 'bool'>)
-        16.0┬▒3╬╝s       9.29┬▒0.3╬╝s     0.58  bench_core.CountNonzero.time_count_nonzero_multi_axis(3, 100, <type 'int'>)
-        53.1┬▒1╬╝s         30.9┬▒2╬╝s     0.58  bench_lib.Pad.time_pad((1000,), 3, 'edge')
-        88.0┬▒8╬╝s         51.1┬▒3╬╝s     0.58  bench_lib.Pad.time_pad((10, 10, 10), 3, 'reflect')
-        44.6┬▒2╬╝s         25.9┬▒1╬╝s     0.58  bench_lib.Pad.time_pad((1000,), (0, 5), 'wrap')
-        90.3┬▒5╬╝s         51.9┬▒1╬╝s     0.57  bench_shape_base.Block2D.time_block2d((512, 512), 'uint8', (2, 2))
-      15.6┬▒0.5╬╝s       8.93┬▒0.3╬╝s     0.57  bench_linalg.Linalg.time_op('norm', 'float32')
-         102┬▒6╬╝s       58.3┬▒0.9╬╝s     0.57  bench_lib.Pad.time_pad((10, 10, 10), 1, 'edge')
-        80.1┬▒4╬╝s         45.6┬▒3╬╝s     0.57  bench_lib.Pad.time_pad((10, 100), 3, 'edge')
-        44.2┬▒2╬╝s         24.9┬▒1╬╝s     0.56  bench_lib.Pad.time_pad((1000,), 1, 'wrap')
-        71.6┬▒8╬╝s         39.5┬▒1╬╝s     0.55  bench_lib.Pad.time_pad((10, 10, 10), 1, 'wrap')
-       81.7┬▒10╬╝s         44.8┬▒2╬╝s     0.55  bench_lib.Pad.time_pad((10, 100), 1, 'edge')
-        420┬▒90╬╝s         230┬▒10╬╝s     0.55  bench_shape_base.Block.time_3d(10, 'block')
-        114┬▒20╬╝s         62.3┬▒2╬╝s     0.55  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'constant')
-      5.76┬▒0.1╬╝s      3.13┬▒0.08╬╝s     0.54  bench_core.CorrConv.time_convolve(50, 10, 'same')
-      5.30┬▒0.1╬╝s      2.84┬▒0.08╬╝s     0.54  bench_core.CorrConv.time_correlate(50, 100, 'valid')
-        92.5┬▒4╬╝s         49.3┬▒1╬╝s     0.53  bench_shape_base.Block2D.time_block2d((256, 256), 'uint32', (2, 2))
-        13.5┬▒3╬╝s       7.07┬▒0.2╬╝s     0.52  bench_reduce.MinMax.time_min(<type 'numpy.float32'>)
-        7.66┬▒1╬╝s       3.88┬▒0.2╬╝s     0.51  bench_core.CorrConv.time_convolve(50, 100, 'valid')
-        29.0┬▒3╬╝s       14.5┬▒0.8╬╝s     0.50  bench_shape_base.Block.time_no_lists(10)
-      6.62┬▒0.3╬╝s       3.30┬▒0.2╬╝s     0.50  bench_core.CorrConv.time_convolve(1000, 1000, 'valid')
-        74.2┬▒7╬╝s       36.2┬▒0.9╬╝s     0.49  bench_shape_base.Block2D.time_block2d((256, 256), 'uint16', (2, 2))
-      5.55┬▒0.3╬╝s       2.70┬▒0.2╬╝s     0.49  bench_core.CorrConv.time_convolve(50, 10, 'valid')
-       73.9┬▒20╬╝s         35.8┬▒2╬╝s     0.48  bench_lib.Pad.time_pad((10, 100), 1, 'reflect')
-        224┬▒20╬╝s          107┬▒7╬╝s     0.48  bench_shape_base.Block2D.time_block2d((256, 256), 'uint64', (4, 4))
-      3.87┬▒0.1╬╝s      1.83┬▒0.06╬╝s     0.47  bench_core.CountNonzero.time_count_nonzero(2, 100, <type 'str'>)
-        109┬▒30╬╝s         51.5┬▒3╬╝s     0.47  bench_lib.Pad.time_pad((10, 10, 10), (0, 5), 'edge')
-        240┬▒20╬╝s          112┬▒4╬╝s     0.47  bench_shape_base.Block2D.time_block2d((512, 512), 'uint16', (4, 4))
-        337┬▒40╬╝s          158┬▒7╬╝s     0.47  bench_shape_base.Block2D.time_block2d((512, 512), 'uint32', (4, 4))
-         188┬▒8╬╝s         88.0┬▒2╬╝s     0.47  bench_shape_base.Block2D.time_block2d((512, 512), 'uint8', (4, 4))
-      4.39┬▒0.2╬╝s      2.04┬▒0.09╬╝s     0.47  bench_core.CountNonzero.time_count_nonzero(3, 10000, <type 'bool'>)
-        73.2┬▒4╬╝s       33.9┬▒0.5╬╝s     0.46  bench_shape_base.Block2D.time_block2d((128, 128), 'uint64', (2, 2))
-        5.48┬▒1╬╝s       2.44┬▒0.1╬╝s     0.45  bench_core.CountNonzero.time_count_nonzero(2, 100, <type 'object'>)
-      4.46┬▒0.1╬╝s      1.97┬▒0.08╬╝s     0.44  bench_core.CorrConv.time_correlate(50, 10, 'full')
-        30.4┬▒9╬╝s       13.3┬▒0.3╬╝s     0.44  bench_shape_base.Block.time_no_lists(1)
-      7.05┬▒0.2╬╝s      3.05┬▒0.06╬╝s     0.43  bench_reduce.SmallReduction.time_small
-        7.35┬▒1╬╝s       3.12┬▒0.2╬╝s     0.42  bench_core.CorrConv.time_convolve(50, 10, 'full')
-      4.36┬▒0.1╬╝s      1.84┬▒0.07╬╝s     0.42  bench_core.CorrConv.time_correlate(50, 10, 'same')
-      3.51┬▒0.2╬╝s      1.46┬▒0.05╬╝s     0.42  bench_core.CountNonzero.time_count_nonzero(1, 100, <type 'object'>)
-     4.03┬▒0.05╬╝s       1.66┬▒0.1╬╝s     0.41  bench_core.CorrConv.time_correlate(1000, 1000, 'valid')
-        199┬▒10╬╝s         80.1┬▒3╬╝s     0.40  bench_shape_base.Block2D.time_block2d((256, 256), 'uint32', (4, 4))
-      3.98┬▒0.2╬╝s      1.60┬▒0.08╬╝s     0.40  bench_core.CountNonzero.time_count_nonzero(2, 10000, <type 'bool'>)
-        61.8┬▒2╬╝s         24.8┬▒1╬╝s     0.40  bench_shape_base.Block2D.time_block2d((256, 256), 'uint8', (2, 2))
-      4.13┬▒0.1╬╝s      1.62┬▒0.05╬╝s     0.39  bench_core.CorrConv.time_correlate(50, 10, 'valid')
-        61.6┬▒2╬╝s         23.9┬▒1╬╝s     0.39  bench_shape_base.Block2D.time_block2d((128, 128), 'uint32', (2, 2))
-        184┬▒10╬╝s         70.5┬▒3╬╝s     0.38  bench_shape_base.Block2D.time_block2d((256, 256), 'uint16', (4, 4))
-        56.1┬▒4╬╝s       21.0┬▒0.9╬╝s     0.38  bench_shape_base.Block2D.time_block2d((64, 64), 'uint64', (2, 2))
-        40.0┬▒2╬╝s       15.0┬▒0.6╬╝s     0.37  bench_shape_base.Block.time_block_simple_column_wise(10)
-         121┬▒2╬╝s         45.1┬▒2╬╝s     0.37  bench_shape_base.Block.time_nested(1)
-         179┬▒4╬╝s         66.1┬▒4╬╝s     0.37  bench_shape_base.Block2D.time_block2d((128, 128), 'uint64', (4, 4))
-        59.8┬▒2╬╝s         22.0┬▒1╬╝s     0.37  bench_shape_base.Block2D.time_block2d((128, 128), 'uint16', (2, 2))
-     3.19┬▒0.05╬╝s      1.17┬▒0.02╬╝s     0.37  bench_core.CountNonzero.time_count_nonzero(1, 100, <type 'str'>)
-        54.0┬▒3╬╝s         19.7┬▒1╬╝s     0.37  bench_shape_base.Block2D.time_block2d((32, 32), 'uint64', (2, 2))
-        56.9┬▒1╬╝s       20.7┬▒0.7╬╝s     0.36  bench_shape_base.Block2D.time_block2d((64, 64), 'uint32', (2, 2))
-      3.14┬▒0.1╬╝s      1.14┬▒0.04╬╝s     0.36  bench_core.CountNonzero.time_count_nonzero(1, 10000, <type 'bool'>)
-        92.7┬▒2╬╝s         33.7┬▒2╬╝s     0.36  bench_shape_base.Block.time_block_complicated(1)
-         104┬▒4╬╝s         37.8┬▒1╬╝s     0.36  bench_shape_base.Block.time_block_complicated(10)
-         128┬▒5╬╝s         45.5┬▒2╬╝s     0.36  bench_shape_base.Block.time_nested(10)
-       196┬▒100╬╝s         69.4┬▒3╬╝s     0.35  bench_ma.Concatenate.time_it('unmasked+masked', 2)
-         153┬▒5╬╝s         53.9┬▒2╬╝s     0.35  bench_shape_base.Block2D.time_block2d((128, 128), 'uint16', (4, 4))
-        39.4┬▒2╬╝s       13.8┬▒0.5╬╝s     0.35  bench_shape_base.Block.time_block_simple_column_wise(1)
-        53.5┬▒2╬╝s         18.7┬▒1╬╝s     0.35  bench_shape_base.Block2D.time_block2d((32, 32), 'uint8', (2, 2))
-        55.2┬▒2╬╝s       19.3┬▒0.6╬╝s     0.35  bench_shape_base.Block2D.time_block2d((32, 32), 'uint16', (2, 2))
-        16.9┬▒1╬╝s       5.89┬▒0.5╬╝s     0.35  bench_core.Core.time_dstack_l
-        60.6┬▒3╬╝s       21.1┬▒0.6╬╝s     0.35  bench_shape_base.Block2D.time_block2d((128, 128), 'uint8', (2, 2))
-      25.5┬▒0.2╬╝s       8.88┬▒0.3╬╝s     0.35  bench_shape_base.Block.time_block_simple_row_wise(10)
-        54.6┬▒3╬╝s       19.0┬▒0.6╬╝s     0.35  bench_shape_base.Block2D.time_block2d((16, 16), 'uint64', (2, 2))
-        52.6┬▒2╬╝s       18.2┬▒0.7╬╝s     0.35  bench_shape_base.Block2D.time_block2d((16, 16), 'uint16', (2, 2))
-        6.57┬▒2╬╝s      2.25┬▒0.08╬╝s     0.34  bench_core.CountNonzero.time_count_nonzero(3, 100, <type 'str'>)
-        24.3┬▒1╬╝s       8.30┬▒0.6╬╝s     0.34  bench_shape_base.Block.time_block_simple_row_wise(1)
-         148┬▒3╬╝s         50.0┬▒3╬╝s     0.34  bench_shape_base.Block2D.time_block2d((16, 16), 'uint32', (4, 4))
-         171┬▒8╬╝s         57.9┬▒4╬╝s     0.34  bench_shape_base.Block2D.time_block2d((256, 256), 'uint8', (4, 4))
-         159┬▒5╬╝s         53.8┬▒1╬╝s     0.34  bench_shape_base.Block2D.time_block2d((64, 64), 'uint64', (4, 4))
-        171┬▒20╬╝s         57.7┬▒2╬╝s     0.34  bench_shape_base.Block2D.time_block2d((128, 128), 'uint32', (4, 4))
-      3.15┬▒0.3╬╝s      1.06┬▒0.03╬╝s     0.34  bench_core.CountNonzero.time_count_nonzero(3, 100, <type 'int'>)
-        55.7┬▒5╬╝s       18.7┬▒0.2╬╝s     0.34  bench_shape_base.Block2D.time_block2d((16, 16), 'uint8', (2, 2))
-         158┬▒7╬╝s         52.6┬▒3╬╝s     0.33  bench_shape_base.Block2D.time_block2d((128, 128), 'uint8', (4, 4))
-         153┬▒4╬╝s         50.7┬▒1╬╝s     0.33  bench_shape_base.Block2D.time_block2d((32, 32), 'uint64', (4, 4))
-         152┬▒7╬╝s         50.3┬▒1╬╝s     0.33  bench_shape_base.Block2D.time_block2d((16, 16), 'uint8', (4, 4))
-        53.6┬▒3╬╝s       17.7┬▒0.4╬╝s     0.33  bench_shape_base.Block2D.time_block2d((16, 16), 'uint32', (2, 2))
-         156┬▒4╬╝s         51.4┬▒3╬╝s     0.33  bench_shape_base.Block2D.time_block2d((64, 64), 'uint8', (4, 4))
-         148┬▒3╬╝s         48.2┬▒2╬╝s     0.33  bench_shape_base.Block2D.time_block2d((16, 16), 'uint16', (4, 4))
-        160┬▒10╬╝s         52.0┬▒1╬╝s     0.33  bench_shape_base.Block2D.time_block2d((64, 64), 'uint32', (4, 4))
-         159┬▒8╬╝s         51.4┬▒3╬╝s     0.32  bench_shape_base.Block2D.time_block2d((64, 64), 'uint16', (4, 4))
-        59.8┬▒3╬╝s         19.3┬▒1╬╝s     0.32  bench_shape_base.Block2D.time_block2d((32, 32), 'uint32', (2, 2))
-         153┬▒4╬╝s         49.4┬▒2╬╝s     0.32  bench_shape_base.Block2D.time_block2d((32, 32), 'uint32', (4, 4))
-      15.6┬▒0.6╬╝s       5.03┬▒0.3╬╝s     0.32  bench_core.Core.time_vstack_l
-         154┬▒7╬╝s         49.7┬▒2╬╝s     0.32  bench_shape_base.Block2D.time_block2d((32, 32), 'uint8', (4, 4))
-        59.6┬▒6╬╝s       19.1┬▒0.8╬╝s     0.32  bench_shape_base.Block2D.time_block2d((64, 64), 'uint8', (2, 2))
-      3.03┬▒0.4╬╝s         969┬▒30ns     0.32  bench_core.CountNonzero.time_count_nonzero(2, 100, <type 'int'>)
-        120┬▒10╬╝s         38.4┬▒2╬╝s     0.32  bench_shape_base.Block.time_3d(1, 'block')
-         156┬▒5╬╝s         49.3┬▒1╬╝s     0.32  bench_shape_base.Block2D.time_block2d((16, 16), 'uint64', (4, 4))
-        164┬▒10╬╝s         49.3┬▒2╬╝s     0.30  bench_shape_base.Block2D.time_block2d((32, 32), 'uint16', (4, 4))
-       65.7┬▒10╬╝s       19.6┬▒0.7╬╝s     0.30  bench_shape_base.Block2D.time_block2d((64, 64), 'uint16', (2, 2))
-     2.82┬▒0.08╬╝s         732┬▒30ns     0.26  bench_core.CountNonzero.time_count_nonzero(1, 100, <type 'int'>)
-     2.77┬▒0.07╬╝s         664┬▒30ns     0.24  bench_core.CountNonzero.time_count_nonzero(2, 100, <type 'bool'>)
-      2.61┬▒0.1╬╝s         624┬▒20ns     0.24  bench_core.CountNonzero.time_count_nonzero(1, 100, <type 'bool'>)
-        16.8┬▒3╬╝s       3.97┬▒0.2╬╝s     0.24  bench_core.Core.time_hstack_l
-      2.78┬▒0.1╬╝s         637┬▒20ns     0.23  bench_core.CountNonzero.time_count_nonzero(3, 100, <type 'bool'>)
-      2.36┬▒0.2╬╝s          207┬▒5ns     0.09  bench_overrides.ArrayFunction.time_mock_broadcast_to_numpy
-      2.68┬▒0.1╬╝s          221┬▒7ns     0.08  bench_overrides.ArrayFunction.time_mock_concatenate_numpy
-      2.58┬▒0.1╬╝s         201┬▒10ns     0.08  bench_overrides.ArrayFunction.time_mock_broadcast_to_duck
-      3.02┬▒0.2╬╝s          222┬▒6ns     0.07  bench_overrides.ArrayFunction.time_mock_concatenate_duck
-      4.29┬▒0.3╬╝s          216┬▒6ns     0.05  bench_overrides.ArrayFunction.time_mock_concatenate_mixed
-        142┬▒20╬╝s          213┬▒8ns     0.00  bench_overrides.ArrayFunction.time_mock_concatenate_many

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.

рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдХреЗ рд▓рд┐рдП https://docs.google.com/spreadsheets/d/15-AFI_cmZqfkU6mo2p1znsQF2E52PEXpF68QqYqEar4/edit#gid = 0 рднреА

рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ, рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╕реБрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, np.block() ред

@shoyer - рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп ndarray ред # 12321 рджреЗрдЦреЗрдВред

@shoyer - рдореИрдВрдиреЗ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рджреЛ рдореБрджреНрджреЗ рдЙрдард╛рдП рд╣реИрдВ рдЬреЛ рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рднреА

  1. рдХреНрдпрд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░рдгреА-рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ types рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? (рдХреЗрд╡рд▓ рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред) рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред (рджреЗрдЦреЗрдВ # 12327)ред
  2. рдХреНрдпрд╛ ndarray.__array_function__ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ __array_function__ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ? рдпрд╣ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рд▓рд┐рд╕реНрдХреЛрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рджрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрдорд╛рдирдд рдХрд╛ рдореМрдХрд╛ рд╣реИред рдпрд╣ ndarray.__array_function__ рдЕрдВрджрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред (рдФрд░ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ __array_ufunc__ ...) рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП # 12,328 рджреЗрдЦреЗрдВ __array_function__ рдХреЗрд╡рд▓ред

@shoyer - (1) рдХреЗ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП # 12327 рджреЗрдЦреЗрдВ - рдпрджрд┐ рд╣рдо рдЗрд╕ рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ NEP рдХреЛ рднреА рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ (2) рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП # 12328, рдЬреНрдпрд╛рджрд╛рддрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдореИрдВ рдпрд╣рд╛рдВ рджреЛрдиреЛрдВ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдкрд░ +1 рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдбрд┐рд╕реНрдкреИрдЪрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдирд╛рдо https://github.com/numpy/numpy/pull/12789 рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛, рдЬрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЛ TypeError: _pad_dispatcher missing 1 required positional argument рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ

Https://github.com/numpy/numpy/issues/12028#issuecomment -429377396 (рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдПрдХ рдЪреМрдерд╛ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реВрдВрдЧрд╛:

рд╡рд┐рдХрд▓реНрдк 4 : рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбрд┐рд╕реНрдкреИрдЪрд░ рд▓рд┐рдЦреЗрдВ:

def sin(a):
    return (a,)


@array_function_dispatch(sin)
def sin(a):
     ...


def cos(a):
    return (a,)


@array_function_dispatch(cos)
def cos(a):
    ...

рд▓рд╛рдн:

  • рдкрд╛рдпрдерди рдЕрдм рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕рд╣реА рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИред

рдиреБрдХрд╕рд╛рди:

  • рдЕрдзрд┐рдХ рдХреЛрдб рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐
  • рдЕрдзрд┐рдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖рддрд╛ - рдпрд╣ рдЕрдм рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо pad рдЧрд▓рдд рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ _after_ dispatcher рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реЗрд╖рдгрдХрд░реНрддрд╛ рдирд╛рдо рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ np.arange рдпрд╛ np.empty рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд░реЗрд╖рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рдХрд▓реНрдк NumPy рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдПрдирдИрдкреА рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ? рдХреНрдпрд╛ рдЗрд╕ рдмрджрд▓рд╛рд╡ рд╕реЗ рдХреБрдЫ рдЯреВрдЯреЗрдЧрд╛?

np.arange рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, https://github.com/numpy/numpy/issues/12379 рджреЗрдЦреЗрдВред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ np.empty() рдкреНрд░реЗрд╖рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рд╡рд╣рд╛рдБ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдЖрдХреГрддрд┐ рдФрд░ рдПрдХ dtype рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ np.empty_like() рдПрдХ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ https://github.com/numpy/numpy/pull/13046 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 4 : рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбрд┐рд╕реНрдкреИрдЪрд░ рд▓рд┐рдЦреЗрдВ:

рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдкрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ np.empty () рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдбрд┐рд╕реНрдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдЖрдХреГрддрд┐ рдФрд░ рдПрдХ dtype

рдЖрдк рдЙрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдХрд╕реНрдЯрдо рдЖрдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

Screen Shot 2019-04-03 at 1 06 46 PM

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрд▓рд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдЖрдХрд╛рд░ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИ, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

class ExprShape:
    def __getitem__(self, i):
        return ('getitem', self, i)
    def __len__(self):
        return ('len', self)

numpy.empty(ExprShape())

рдЬреЛ рдореИрдВ ExprArray('empty', ExprShape()) рддрд░рд╣ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╣рд╛рдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╣рдо рдЖрдХрд╛рд░ рдкрд░ рднреА рдкреНрд░реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ / рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬреИрд╕реЗ empty_like shape ) рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдореИрдВ рдЬрд┐рди рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡реЗ size рддрд░реНрдХ np.random.RandomState рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЙрди рд╕рднреА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - http://www.numpy.org/ рджреЗрдЦреЗрдВ # callable -objects-generate-at-runtime

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╕рд░рдгреА рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬреИрд╕реЗ рдХрд┐ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЦрд╛рд▓реА_ рдЬреИрд╕рд╛) рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдпрджрд┐ рд╣рдо рдореМрдЬреВрджрд╛ API рд▓реЗ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ NumPy рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдмреИрдХрдПрдВрдб рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдПрдирдкреА рдЬреИрд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде scipy.optimize.differential_evolution рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗ, рдЬреЛ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рддреЗ рд╣реИрдВред

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдБ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ np.full , рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ numpy рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрдирдкреБрдЯ рдкрд╛рд░рд┐рдд рдХрд░ рдореЗрдВ рдпрд╣ рднреА рдкреНрд░рддреАрдХ рдЪрд┐рдиреНрд╣ рд╣реИред

рдпрджрд┐ рд╣рдо рдореМрдЬреВрджрд╛ API рд▓реЗ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ NumPy рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдмреИрдХрдПрдВрдб рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред np.array() рддрд░рд╣ рд╕реНрдкрд╖реНрдЯ рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, energies = np.full(num_members, np.inf) рд╕реЗ energies = np.full_like(population, np.inf, shape=num_members) рдмрджрд▓рдирд╛ рдПрдХ рдЖрд╕рд╛рди рдФрд░ рдкрдардиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред Np.array () рдХреА рддрд░рд╣ рд╕реНрдкрд╖реНрдЯ рд╕рд░рдгреА рдирд┐рд░реНрдорд╛рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ np.array рдХрд╛ рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрднреА рднреА 100% рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдКрд░реНрдЬрд╛ = np.full (num_members, np.inf) рдХреЛ рдКрд░реНрдЬрд╛ = np.full_like (рдЬрдирд╕рдВрдЦреНрдпрд╛, np.inf, рдЖрдХрд╛рд░ = num_members) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдПрдХ рдЖрд╕рд╛рди рдФрд░ рдкрдардиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрдИ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╛ рддреЛ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЙрд╕ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдПрдХ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЬреЛ рд╕реБрдиреНрди рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдЖрдпрд╛рдд рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВред ala рд╕реБрдВрдмрд╛ рдпрд╛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ред

рдЙрди рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ np.full рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛), рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ NEP-18 рдХрд╛ рд▓рдХреНрд╖реНрдп рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИ, рдЬрдм рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореВрд▓ NumPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдВред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рджрд░реНрд╢рди / рдЬрдЯрд┐рд▓рддрд╛ рдЯреНрд░реЗрдбрдСрдл рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдЪреАрд▓рд╛рдкрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ np.array рдХрд╛ рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрднреА рднреА 100% рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдирдИрдкреА 22 рдореЗрдВ рдпрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо numpy.ndarray рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП np.asarray() рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ np.asarray() рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рдиреАрдЪреЗ numpy.ndarray рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рд░рдгреА рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдкрд╣рд▓реВ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рджрд░реНрд╢рди / рдЬрдЯрд┐рд▓рддрд╛ рдЯреНрд░реЗрдбрдСрдл рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рдЪреАрд▓рд╛рдкрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдБред NEP 18 рдХреЛ рдбреНрд░реЙрдк-рдЗрди NumPy рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реИред

рдореИрдВрдиреЗ __numpy_implementation__ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП NEP-18 рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд╛ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:
https://github.com/numpy/numpy/pull/13305

рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо numpy.testing рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЯрд╛рд▓рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ: https://github.com/numpy/numpy/issues/13588

рдореИрдВ рдЬрд▓реНрдж рд╣реА рдРрд╕рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ ...

рдПрдХ рд╕рдВрд╢реЛрдзрди рд╣реИ рдЬреЛ рдореИрдВ рдПрдирдИрдкреА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрдк-рд▓реЗрдЦрдХреЛрдВ рдХреЛ NEP-18 рдХреА рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ: https://github.com/numpy/numpy/pull/13633

рдЬрдм рдореИрдВрдиреЗ gh-13329 рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рдореИрдВрдиреЗ рдкреНрд░рдпреЛрдЬреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛- # 13588 1.17 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реБрдзрд╛рд░ рдФрд░ arange gh-12379 рдЕрднреА рднреА 1.17 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

# 13728 рднреА рд╣реИ - рдбрд┐рд╕реНрдкреИрдЪрд░ рдореЗрдВ histogram[2d]d рд▓рд┐рдП рдПрдХ рдмрдЧ

рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реБрдзрд╛рд░ рдФрд░ ahh-12379 рдХреЛ рдЕрднреА рднреА 1.17 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдЧрд╛рдпрдм рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ gh-13844 рдЦреЛрд▓рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ arange рдЦреБрд▓реЗ рдореБрджреНрджреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

@shoyer рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

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

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

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

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

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

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