Numpy: рдмрддрдЦ рд╕рд░рдгреА рдмрд▓рд╛рддреНрдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди

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

@Shoyer , @pentschev , рдФрд░ @mrocklin рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪрд░реНрдЪрд╛ (https://github.com/dask/dask/issues/4883) рдХреЗ рдмрд╛рдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рдирд╛ред рдПрдЖрдИрдпреВрдЖрдИ рдХреА рдЪрд░реНрдЪрд╛ рдПрдирдИрдкреА 22 рдореЗрдВ рдХреА рдЧрдИ рдереА (рдЗрд╕рд▓рд┐рдП рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреЛ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рддреЛрддрд╛ рд░рд╣рд╛ рд╣реВрдВ;)ред

рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╕рд░рдгреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдмрддрдЦ рд╕рд░рдгреА рд╣реИ (рдЬреИрд╕реЗ ndarray )ред рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ np.asanyarray рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдкрд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ (рдмрддрдЦ) рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо ndarray рдЙрдк-рд╡рд░реНрдЧ, ndarray s, рдФрд░ рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ (рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪрд┐рдпреЛрдВ) рдХрд╛ рдЬрд╝рдмрд░рджрд╕реНрддреА рд╕реЗ ndarray s рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред

cc @njsmith (рдЬреЛ NEP 22 рдХрд╛

01 - Enhancement numpy.core

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

рд╢рд╛рдпрдж quack_array :)

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

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

import numpy as np

# hypothetical np.duckarray() function
def duckarray(array_like):
  if hasattr(array_like, '__duckarray__'):
    # return an object that can be substituted for np.ndarray
    return array_like.__duckarray__()
  return np.asarray(array_like)

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ:

class SparseArray:
  def __duckarray__(self):
    return self
  def __array__(self):
    raise TypeError

np.duckarray(SparseArray())  # returns a SparseArray object
np.array(SparseArray())  # raises TypeError

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ np.duckarray рдФрд░ __duckarray__ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рдЗрди рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдирдИрдкреА 22 рд╕реЗ рд╢рдмреНрджрд╛рд╡рд▓реА рджреЗрдЦреЗрдВ:

"рдбрдХ рдПрд░реЗ" рдЕрдм рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ рдФрд░ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЪреБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, "рдПрд░реЗ-рд▓рд╛рдЗрдХ" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдХреБрдЫ рднреА рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдореЗрдВ coerced рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреА рд╡рд╕реНрддреБрдУрдВ рд╕рд╣рд┐рдд), рдФрд░ "anyarray" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдХреБрдЫ рд╣реИ рдЬреЛ ndarray рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде "рд╣реИ, рдЬреЛ рдПрдХ рдмрддрдЦ рд╕рд░рдгреА рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, np.matrix рдПрдХ" anyarray "рд╣реИ, рд▓реЗрдХрд┐рди" рдмрддрдЦ рд╕рд░рдгреА "рдирд╣реАрдВ рд╣реИ)ред рдпрд╣ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрд╛рдЗрдХ-рд╢реЗрдб рд╣реИ рдЗрд╕рд▓рд┐рдП рдЕрдм рддрдХ рд╣рдо рдХреЗрд╡рд▓ "рдмрддрдЦ рд╕рд░рдгреА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд╕рд░рдгреА, рдЫрджреНрдорд╢реНрд░реЗрдп, рдирд╛рдордорд╛рддреНрд░, ersatzarray, arraymimic, ...

рдХреБрдЫ рдЕрдиреНрдп рдирд╛рдо рд╡рд┐рдЪрд╛рд░: np.array_compatible() , np.array_api() ....

np.array_compatible рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ duckarray рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред np.array_api рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЧрд▓рдд рд╡рд┐рдЪрд╛рд░ imho рджреЗрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдП рд╣реИрдВ, рд╢рд╛рдпрдж рд╣рдореЗрдВ "рдмрддрдЦ-рд╕рд░рдгреА" рдирд╛рдо рдХреЛ рдЖрд╢реАрд░реНрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП ......

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

рд╢рд╛рдпрдж quack_array :)

рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ np.duckarray рд╕рд╛рде рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ, рдЬреЛ np.empty_like рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ

>>> import numpy as np, cupy as cp
>>> a  = cp.array([1, 2])
>>> b = np.ones_like(a)
>>> type(b)
<class 'cupy.core.core.ndarray'>

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ array_like рд╣реИ, рддреЛ рд╣рдо NumPy рдХреЗ API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ CuPy рд╕рд░рдгреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛:

import numpy as np, cupy as cp
a  = cp.array([1, 2])
b = [1, 2]
c = np.asarray(b, like=a)

рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ / рд╕реБрдЭрд╛рд╡?

рд╢рд╛рдпрдж np.copy_like? рд╣рдо рдзреНрдпрд╛рди рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг рд╣реИрдВ
(рдЬреИрд╕реЗ, dtype рдпрд╛ рдирд╣реАрдВ рд╕рд╣рд┐рдд) рдХреЛ рджреВрд╕рд░реЗ рдРрд░реЗ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реЛрдо, рдЬреБрд▓рд╛рдИ 1, 2019 рдХреЛ 5:40 рдкреВрд░реНрд╡рд╛рд╣реНрди рдкреАрдЯрд░ рдПрдВрдбреНрд░рд┐рдпрд╛рд╕ рдПрдиреНрдЯрд╢реЗрд╡ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
np.duckarray рдХреЗ рд╕рд╛рде, рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ
рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░, np.empty_like рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рдиред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдПрдирдкреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рдЖрдпрд╛рдд рдХрд░реЗрдВ, рдХрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдкреАрдкреА >>> a = cp.array ([1, 2]) >>> b = np.ones_like (a) >>> рдкреНрд░рдХрд╛рд░ (b)

рджреВрд╕рд░реА рдУрд░, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ array_like рд╣реИ рдЬреЛ рд╣рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
NumPy рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ CuPy рд╕рд░рдгреА, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдЧрд╛
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорджрджрдЧрд╛рд░:

рдПрдирдкреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди рдЖрдпрд╛рдд, рд╕реАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрдкрд╛рд▓реА
a = cp.array ([1, 2])
рдмреА = [рез, реи]
c = np.asarray (b, like = a)

рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ / рд╕реБрдЭрд╛рд╡?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVRCWHHHHXMHHMMH3M5H5WHYH3H8H8H3H3H8H8H8&hl=hi&hl=hi/http://shith_nok-hut-h&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAJJFVRSYHUYHMPWQTW2NLLP5H3LRANCNFSM4H3HQWAA
ред

np.copy_like рднреА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ dtype рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред

рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди np.copy_like рддрд░рд╣ рдХреБрдЫ NEP-22 рдореЗрдВ рд╕рдВрд╢реЛрдзрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпрд╛ рдЗрд╕реЗ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдбрд╝реЗ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ np.copy_like рдФрд░ np.duckarray (рдпрд╛ рдЬреЛ рднреА рд╣рдо рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ) рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдирдП NEP рдореЗрдВ рдЬрдмрд░рджрд╕реНрддреА / рдмрддрдЦ рд╕рд░рдгрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЭреБрдХ рдЬрд╛рдПрдЧрд╛, рдПрдХ рдпрд╣ NEP 22 рдХреА рддрд░рд╣ "рд╕реВрдЪрдирд╛рддреНрдордХ" рдХреЗ рдмрдЬрд╛рдп NEP 18 рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рд╡ рд╣реИред рдЗрд╕реЗ рд▓рдВрдмреЗ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЗрд░рдгрд╛ NEP 18/22 рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИред

np.copy_like() рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдиреЛрдЯ: рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ __array_function__ (рдпрд╛ рдХреБрдЫ рдФрд░) рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП np.copy_like(sparse_array, like=dask_array) рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдпрд╛ рддреЛ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдорд╣рд╛рди, рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░реЗрд╖рдг рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рджреЛрдиреЛрдВ np.duckarray рдФрд░ np.copy_like рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ NEP рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдкреНрддрд╛рд╣ PR рдПрдХ рдорд╕реМрджрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж рдкреАрдЯрд░!

рд╕реЛрдо, рдЬреБрд▓рд╛рдИ 1, 2019 рдХреЛ рд╕реБрдмрд╣ 9:29 рдмрдЬреЗ рдкреАрдЯрд░ рдПрдВрдбреНрд░рд┐рдпрд╛рд╕ рдПрдиреНрдЯрд╢реЗрд╡ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

рдорд╣рд╛рди, рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░реЗрд╖рдг рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ
np.duckarray рдФрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ NEP рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛
np.copy_like рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдПрдХ рдорд╕реМрджрд╛ PR рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVW2YUBNUCJUCKZJ6KJJBB5BH5HNNMMHHHWWHYHOHOHOHOHOHOHOHOHOHOHOH3H6H3H3H3&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAJJFVR2KTPAZ4JPWDYYMFLP5IWHNANCNFSM4H3HQWAA
ред

рдореЗрд░реА рдЦреБрд╢реА, рдФрд░ рдЗрд╕ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

array_like рдФрд░ copy_like рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рд╣реА рд╕реЛрдЪ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред cupy / dask / рд╡рд┐рд░рд▓ / etc), рд╕рд╣реА рд╣реИ? рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрдиреЗ рдкрд░ рд╡реЗ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЧреИрд░-рдЦрд╕реНрддрд╛рд╣рд╛рд▓ рд╕рд░рдгреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

рдпрд╣ рд╕рдЪ рд╣реИ, рдпреЗ рдХреЗрд╡рд▓ рддрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ рдЬрдм рдЖрдк рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ np.duckarray рдФрд░ np.copy_like рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рднрд▓реЗ рд╣реА рддрд░реНрдХ рдХреЗрд╡рд▓ NumPy рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реЛрдВ - рд╡реЗ np.array / np.copy ред

рд╕рднреА рд╕рд░рдгреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ copy рд╡рд┐рдзрд┐ рд╕рд╣реА рд╣реИ? copy_like рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпреЛрдВ рдЬреЛрдбрд╝реЗрдВ?

array_like рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдПред

np.duckarray рдореЗрд░реЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рдореИрдВ np.copy_like рдФрд░ np.duckarray (рдпрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдирдпрд╛ NEP рдореЗрдВ рдмрд▓рд╛рддреНрдХрд╛рд░ / рдмрддреНрддрдЦ рд╕рд░рдг рдмрдирд╛рдиреЗ рдкрд░ рдПрдХ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЬреЛ NEP 22 рдЬреИрд╕реЗ "рд╕реВрдЪрдирд╛рддреНрдордХ" рдЬреИрд╕реЗ NEP 18 рдХреА рддрд░рд╣ рдкреНрд░рд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рд╡ рд╣реИред

+1

array_like рдореИрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдПред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ np.copy_like рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж np.copy рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрд┐рд╕реНрдкреИрдЪ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╕рд░рдгреА рдиреЙрди-рдирдореНрдкреА рд╣реИред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди np.array_like рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдРрд╕реЗ рдирд╛рдо рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ array_like рд▓рд┐рдП рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЕрдм рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ np.copy_like рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ np.asarray рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдБ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ NumPy рди рд╣реЛред рд╕рд░рдгреАред рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗрд╡рд▓ рддрднреА рдмрдирд╛рдИ рдЬрд╛рдП рдЬрдм a b рдЬреИрд╕реЗ рдХреЙрд▓ np.copy_like(a, like=b) ред

рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ np.copy рдкрд╣рд▓реЗ рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕рд░рдгреА рдиреЙрди-рдиреНрдпреВрдореА рд╣реИред

рдЗрд╕реЗ __array_function__ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди np.array_like рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдо рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ array_like-arrays рдХреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдБред рдФрд░ рд╣рд╛рдБ рд╕рд╣рдордд рд╣реВрдБ рдпрд╣ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЕрдм рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ np.copy_like рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ,

рд╣рд╛рдБ рд╡рд╣ рдирд╛рдо рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐ рд╣реИред

рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ np.asarray рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ np.duckarray ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ рдкреАрдЯрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рд╕рд╛рдзрд╛ рдЧрдпрд╛ рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП np.copy_like рдореЗрдВ рдбреВрдмрд╛ред

import numpy as np, cupy as cp
a  = cp.array([1, 2])
b = [1, 2]
c = np.copy_like(b, like=a)

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ np.duckarray рдерд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, np.duckarray рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡рдпрдВ рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗ (рдпрджрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ np.asarray (рдПрдХ NumPy рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА) рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╛рдпрдерди рд╕реВрдЪреА рд╕реЗ рдПрдХ CuPy рд╕рд░рдгреА рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╣реИ рдХрд┐ CuPy рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреА рдЬрд░реВрд░рдд рд╣реИ like= рдПрдХ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА) array_like ред

рдЕрджреНрдпрддрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @jakirkham рдзрдиреНрдпрд╡рд╛рджред

c = np.copy_like(b, like=a)

рддреЛ рд╡рд╣ a.__array_function__ рдорд╛рдзреНрдпрдо рд╕реЗ CuPy рдХреЛ рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдпрджрд┐ рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рддреЛ a=<scipy.sparse matrix> рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА)? рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдирд╛рдорд╕реНрдерд╛рди рдпрд╛ рдирдП рдЕрдВрддрд░-рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛ рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реНрдг-рднрд╡рд┐рд╖реНрдп рд╡рд╛рд▓реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░реЗрд╖рдг рддрдВрддреНрд░ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рднреА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

with cupy_backend:
   np.array(b)

рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЬреЛ __array_function__ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NumPy рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ,

рддреЛ рд╡рд╣ a.__array_function__ рдорд╛рдзреНрдпрдо рд╕реЗ CuPy рдХреЛ рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдпрджрд┐ рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ a=<scipy.sparse matrix> рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА)?

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

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

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

рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЬреЛ __array_function__ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж NumPy рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрд╕реНрд╡рд╕реНрде рд▓рдЧрддрд╛ рд╣реИ ...ред

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

рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЬреЛ __array_function__ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж NumPy рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрд╕реНрд╡рд╕реНрде рд▓рдЧрддрд╛ рд╣реИ ...ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, np.duckarray рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, np.duckarray рдореБрдЦреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд░рдХреНрд╖рд╛рддреНрдордХ рд╣реИ ( asarray рдЕрдиреБрд░реВрдк) рдФрд░ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ "рдХреНрдпрд╛ рдпрд╣ рд╣рдорд╛рд░реА ndarray рдЬреИрд╕реА рдмрддрдЦ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ"), рд▓реЗрдХрд┐рди рд╣рд╛рдБред рдпрджрд┐ рд╣рдо array_function_dispatch рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ np.lib.mixins.NDArrayOperatorsMixin рдФрд░ рдЕрдзрд┐рдХ рдорд┐рдХреНрд╕рд┐рдВрд╕ рд▓рд┐рдЦрдиреЗ рдкрд░ рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭрджрд╛рд░ рдирдпрд╛ рд╕рдмрдореЙрдбреНрдпреВрд▓ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдВрддрд░ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВред __array_function__ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдереА, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред рдЗрд╕реЗ ~ 6 рдорд╣реАрдиреЗ рдХреЗ рд╕рдордп рдкрд░ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдФрд░ @shoyer рдиреЗ рдПрдХ рдордЬрдмреВрдд рдорд╛рдорд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдареЛрд╕ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛ред

рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рдирдП рд╕рдмрдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдВрддрд░ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реА рдУрд░ рд╕реЗ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмреЗрд╣рддрд░ рд╣реИред :)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВред __array_function__ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЪреАрдЬреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред рдЗрд╕реЗ ~ 6 рдорд╣реАрдиреЗ рдХреЗ рд╕рдордп рдкрд░ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдФрд░ @shoyer рдиреЗ рдПрдХ рдордЬрдмреВрдд рдорд╛рдорд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдареЛрд╕ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдореЛрдЯреЗ рддреМрд░ рдкрд░ __array_function__ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ np.duckarray рдФрд░ np.copy_like (рдпрд╛ рдЬреЛ рднреА рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВрдЧреЗ) рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ? рдореИрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдореБрдЭреЗ рдкреВрд░реНрдг-рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░реЗрд╖рдг рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдИ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рдд: рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ __array_function__ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдореЛрдЯреЗ рддреМрд░ рдкрд░ __array_function__ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ np.duckarray рдФрд░ np.copy_like (рдпрд╛ рдЬреЛ рднреА рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВрдЧреЗ) рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рдХреБрдЫ рдЕрдВрд╢ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╕реЗ> 80% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдореБрдЦреНрдп рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рдореБрдЭреЗ рдкреВрд░реНрдг-рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░реЗрд╖рдг рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдИ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рдд: рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ __array_function__ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдЫреЗрдж рдкреНрд▓рдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╣рдо рдХрднреА рднреА "рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ" рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк np.errstate рдпрд╛ np.dtype рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛рд░реНрд░реЗ рдЕрднреА рддрдХ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдиреАрдЪреЗ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ scipy.fft рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ https://github.com/Quansight-Labs/uarray-tree/master/unumpy

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

рдХреГрдкрдпрд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ - рдЪрд▓реЛ рдПрдХ рдФрд░ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред

рдореИрдВ SciPy рдкрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реВрдБрдЧрд╛ред

рдореИрдВ рд╡рд╣рд╛рдБ рд░рд╣реВрдБрдЧрд╛, рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдорд┐рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ np.coerce_like() рдпрд╛ np.cast_like() copy_like рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдВ, рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдХрд┐ рдкреНрд░рддрд┐рдпрд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .cast() рдкрджреНрдзрддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде dtypes рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ рдпрд╛ рддреЛ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпреВрд░реЗрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдХрд┐ рд╣рдо рдореЗрдЯрд╛-рд╕рд░рдгрд┐рдпреЛрдВ (рдЬреИрд╕реЗ рдбрд╕реНрдХ, рдЬрд╝рд╛рд░реНрд░реЗ, рдЖрджрд┐) рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

uarray рдХреЛ рдХрдИ рдмреИрдХреЗрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

with ua.set_backend(inner_array_backend), ua.set_backend(outer_array_backend):
  s = unumpy.sum(meta_array)

рдпрд╣ рдореЗрдЯрд╛-рдПрд░реЗ рдХреЙрд▓ ua.skip_backend рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рд╣реЛрдиреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдореЗрдЯрд╛-рдПрд░реЗ рдХрд╛ рдмреИрдХреЗрдВрдб NotImplemented рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреЗрдореЗрд▓ рдкрд░ рджреЗрддрд╛ рд╣реИред

cc: @hameerabbasi

рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВрдВрдЧрд╛: рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, dask.array , da рд╕рд╛рде рдХреБрдЫ рднреА Skip_backend рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред NumPy рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдПрдХ Skip_backend рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╛ da рдЖрдк рд╣рдореЗрд╢рд╛ рдкреНрд░реЗрд╖рдг рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдЬрдЧрд╣ skip_backend(dask.array) ред

рдкреНрд░реЗрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд░рдгреА рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ ones , cast , рдЖрдк рдмрд╕ рдПрдХ рдмреИрдХрдПрдВрдб рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред np.errstate рдФрд░ np.dtype ред np.ufunc рдореЗрдВ unumpy np.ufunc рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдореВрд▓ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, uarray __ua_convert__ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдареАрдХ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП asarray рд╕реАрдзреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

uarray , @rgommers , @ peterbell10 , @hameerabbasi рдкрд░ рд╕рд┐рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рдЖрдкрдиреЗ _must_ рдХреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдЪрд┐рдд рдмреИрдХрдПрдВрдб рд╕реЗрдЯ рдХрд┐рдпрд╛, рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ? __array_function__ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЬреНрдЮреЗрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ Dask рдХреЛ CuPy рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред

@pentschev рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рддрдм рддрдХ рдерд╛, рдЬрдм рд╣рдордиреЗ рдПрдХ рдмреИрдХрдПрдВрдб рдХреЛ "рд░рдЬрд┐рд╕реНрдЯрд░" рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реА рдереА, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ NumPy (рдпрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рддрдм Dask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА set_backend рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдордЭреЗ рдпрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ @rgommers рд╣реИ https://github.com/numpy/numpy/issues/13831#issuecomment -+релреж,ренрек,рейреи,рейрезрез, рдореЗрдВ рдмреИрдХреЗрдВрдб рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ https://github.com/Quansight-Labs/uarray / рдкреЗрдбрд╝ / рдорд╛рд╕реНрдЯрд░ / unumpyред

рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреБрдЫ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдмреИрдХрдПрдВрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NumPy рдФрд░ Sparse рджреЛрдиреЛрдВ, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╢рд╛рдпрдж рд╕рдм рдХреБрдЫ NumPy-only, Sparse-only рдпрд╛ рджреЛрдиреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛрдЧрд╛ред @ peterbell10 рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХрдИ рдмреИрдХрдПрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/numpy/numpy/issues/13831#issuecomment -507458331, рд▓реЗрдХрд┐рди рдмреИрдХрдПрдВрдб рдХрд╛ рдЪрдпрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рддреАрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ NumPy рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ, Sparse рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ NotImplemented рдХреЛ Sparse рд╕реЗ рд▓реМрдЯрд╛рдПрдВ, рдЬреЛ NumPy рдореЗрдВ рдХреБрдЫ рдЧрд┐рд░рд╛рд╡рдЯ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛ред

SciPy @rgommers , @danielballan рдкрд░ , рдФрд░ рдЦреБрдж рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдд рдХреАред рд╣рдордиреЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ duckarray (рдЙрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдпрд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ 1.18 рдХреЗ рд▓рд┐рдП рд╕реНрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдХ рдкреАрдЖрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛?

рд╣рдордиреЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ duckarray (рдЙрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдпрд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ 1.18 рдХреЗ рд▓рд┐рдП рд╕реНрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдХ рдкреАрдЖрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛?

рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдЯреАрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдПрдирдИрдкреА рд╡рд░реНрддрдиреА рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред Https://github.com/numpy/numpy/issues/13831#issuecomment -507334210 рджреЗрдЦреЗрдВ

рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред ЁЯЩВ

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

a2 = np.empty_like(a1)
a2[...] = a1[...]

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

рд╣рдордиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдбрдХрд╛рд░реНрд░реЗ (рдЙрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред

рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдЯреАрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдПрдирдИрдкреА рд╡рд░реНрддрдиреА рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред # 13831 рджреЗрдЦреЗрдВ

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рддрдХ рдЗрд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореЗрд░реА рдЦрд░рд╛рдм рдпреЛрдЬрдирд╛ https://github.com/numpy/numpy/issues/13831#issuecomment-507336302)ред

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

a2 = np.empty_like(a1)
a2[...] = a1[...]

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

рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдирдХрд▓ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреИрд╕реЗ CuPy https://github.com/cupy/cupy/pull/2079)ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЙрдкреА рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдпрд╣ asarray рдмрджрд▓реЗ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ copy_like рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп NEP-18 рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдЪрд╛рд░ рдкрд░ рдлрд┐рд░ рд╕реЗ

рдЗрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
...
рд╡реНрдпреВрд╣ рдФрд░ рдЕрд╕рд╛рд░реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИрдВред рд╡рд╕реНрддреБ рд╡рд╕реНрддреБред

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

рдмрд╕ рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЦреБрдж рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИ (рд╢рд╛рдпрдж рдХрдИ рдмреЛрдЭрд┐рд▓ рд╡рд┐рд╡рд░рдг рдЬреЛ рдореБрдЭреЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ), рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП ред

рд╡рд┐рдЬреНрдЮрд╛рди рд╕рднрд╛ рдореЗрдВ рджреЗрд╡ рдмреИрдардХ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдереА: рдЪрд▓реЛ 1.17.0 рджрд░рд╡рд╛рдЬреЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рднреА рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдард╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рд╢рд╛рдпрдж рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВред

рд╢рд╛рдпрдж рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВред

рдареАрдХ рд╣реИ, рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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

a2 = np.empty_like(a1)
a2[...] = a1[...]

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

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

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

a2 = np.empty_like(a1)
a2[...] = a1[...]

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

рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рддрд░реНрдХ (рдЬреИрд╕реЗ CuPy cupy / cupy # 2079 ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЙрдкреА рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдпрд╣ asarray рдмрджрд▓реЗ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ copy_like рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп NEP-18 рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдЪрд╛рд░ рдкрд░ рдлрд┐рд░ рд╕реЗ

рдЗрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
...
рд╡реНрдпреВрд╣ рдФрд░ рдЕрд╕рд╛рд░реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИрдВред рд╡рд╕реНрддреБ рд╡рд╕реНрддреБред

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдирдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде np.array рдпрд╛ np.asarray рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЙрдирдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдЕрд░реНрде NumPy рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ np.duckarray

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд╣рдо like рддрд░реНрдХ рдХреЛ duckarray рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рд╢рд╛рдпрдж __array_function__ рдЬреИрд╕реЗ рд╕рдорд░реНрдкрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп __duckarray__ ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИред

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

a2 = np.empty_like(a1)
a2[...] = a1[...]

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

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

рд╕рд╣реА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдЬ CuPy рдФрд░ Sparse рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

a2 = np.copy(a1)

рд╕рд╣реА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдЬ CuPy рдФрд░ Sparse рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

a2 = np.copy(a1)

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдЗрд╕ рдмрддрдЦ-рд╕рд░рдгреА рдХреЛ рдЗрд╕ рдЕрдиреНрдп рдмрддрдЦ-рд╕рд░рдгреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ"

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдирдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде np.array рдпрд╛ np.asarray рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЙрдирдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдЕрд░реНрде NumPy рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ np.duckarray

рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдБ, рдФрд░ рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рдерд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЖрдЬ рддрдХ рдирд╣реАрдВ рдерд╛ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд╣рдо рдбрдХрд╛рд░реЗ рдХреА рддрд░рд╣ рдПрдХ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рд╢рд╛рдпрдж __duckarray__ рдЬреИрд╕реЗ рд╕рдорд░реНрдкрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп __array_function__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрдЧреА рдпрд╛ рдирд╣реАрдВ, рд╣рдореЗрдВ рд╢рд╛рдпрдж рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рдирд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдореЗрдВ рдирд┐рд░рд░реНрдердХ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ like рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рдо duckarray рдФрд░ duckarray_like ?

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдЗрд╕ рдмрддрдЦ-рд╕рд░рдгреА рдХреЛ рдЗрд╕ рдЕрдиреНрдп рдмрддрдЦ-рд╕рд░рдгреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ"

np.copyto рдЖрд╕рдкрд╛рд╕ рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

np.copyto рдЖрд╕рдкрд╛рд╕ рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:

np.copyto(cupy_array, numpy_array)

рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ NumPy рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, asarray рдЕрд░реНрде рд╣реИ рдЧрдВрддрд╡реНрдп рдПрдХ NumPy рд╕рд░рдгреА рд╣реИ, рдХреНрдпрд╛ copyto рд╕рдорд╛рди рдзрд╛рд░рдгрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ?

np.copyto рдкрд╣рд▓реЗ рд╕реЗ рд╣реА __array_function__ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдЧрднрдЧ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

def copyto(dst, src):
    dst[...] = src

рд╣рдо рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

def copylike(src, like):
    dst = np.empty_like(like)
    dst[...] = src
    return dst

np.copyto рдкрд╣рд▓реЗ рд╕реЗ рд╣реА __array_function__ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдЧрднрдЧ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

def copyto(dst, src):
    dst[...] = src

рд╣рдо рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

def copylike(src, like):
    dst = np.empty_like(like)
    dst[...] = src
    return dst

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

рдЦреИрд░ copyto рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд▓реЗрдВред

np.copyto(cp.ndarray, np.random.random((3,)))

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдЬреИрд╕реЗ рдХреБрдЫ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ dst ( cp.ndarray ) рдХреЗ рдЖрд╕рдкрд╛рд╕ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рд░рдгрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ API рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рднреА рдмрдЪрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ NumPy рдХреЗрд╡рд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдЬреЛ рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдерд╛ред

рдмрд╕ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣реБрдЖ рдерд╛, рдпрд╣ рд╕реЛрдЪрдХрд░ рдЪрд┐рдВрддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдпреЗ рдПрдкреАрдЖрдИ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ Dask рдФрд░ Xarray рдмрд╛рддрдЪреАрдд) рдХреЗ рдмреАрдЪ рдмрд╣рд╛рд╡ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ред

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

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

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

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

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

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

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