@shoyer , @pentschev ๋ฐ @mrocklin ๋ฌธ์ (https://github.com/dask/dask/issues/4883)์ ์ด๊ฒ์ NEP 22์์ ๋ ผ์๋์์ต๋๋ค (๊ทธ๋์ ๋๋ ํ ๋ก ์ ๊ฐฑ์ ํ๊ณ ๋ด ์์ ์ ์คํด๋ฅผ ๋ฐ๋ก ์ก๊ธฐ ์ํด ์ฌ๊ธฐ์์ ์ฃผ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ ์์ด๋์ด๋ฅผ ๋ชจ์ผ๊ณ ์์ต๋๋ค.).
๋ค์ํ ๋ค์ด ์คํธ๋ฆผ ๋ฐฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค๋ฆฌ ๋ฐฐ์ด (์ ndarray
)์ด ์๋์ง ํ์ธํ๋ ํจ์๊ฐ ์์ผ๋ฉด ์ ์ฉํฉ๋๋ค. ์ด๊ฒ์ np.asanyarray
์ ๋ค์ ์ ์ฌํ์ง๋ง ์๋ธ ํด๋ ์ฑ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ์ (์ค๋ฆฌ) ๋ฐฐ์ด ์ ํ ์ ๋ฐํ ํ ์ ์์ต๋๋ค. ๊ฐ์ฒด๊ฐ ์ ์ ํ ๋ณํ์ ์ง์ํ์ง ์์ผ๋ฉด ndarray
ํ์ ํด๋์ค, ndarray
s ๋ฐ ๊ธฐํ ํญ๋ชฉ (์ค์ฒฉ ๋ ๋ชฉ๋ก)์ ndarray
๊ฐ์ ์ฒ๋ฆฌํ๋๋ก ํด๋ฐฑ ํ ์ ์์ต๋๋ค.
cc @njsmith (NEP 22๋ฅผ ๊ณต๋ ์์ฑ)
์ ์ ๋ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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__
๋ฅผ ์๋ฆฌ ํ์ ์๋ก ์ฌ์ฉํ์ง๋ง ์ด๋ฌํ ์ด๋ฆ์ ๋ํด ๋ ์ ํ ์ ์์ต๋๋ค. NEP 22์ ์ฉ์ด ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
"Duck array"๋ ํ์ฌ ์๋ฆฌ ํ์ ์๋ก ์ ์๋ํ์ง๋ง ๊ฝค ์ ๋ฌธ ์ฉ์ด์ด๋ฉฐ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ํผ๋ ํ ์ ์์ผ๋ฏ๋ก ์ค์ API ๊ธฐ๋ฅ์ ๋ํด ๋ค๋ฅธ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ํ๊น๊ฒ๋ "๋ฐฐ์ด๊ณผ ์ ์ฌํ"์ ์ด๋ฏธ "๋ฐฐ์ด๋ก ๊ฐ์ ๋ณํ ๋ ์์๋ ๋ชจ๋ ๊ฒ"(์ : ๋ชฉ๋ก ๊ฐ์ฒด ํฌํจ)์ ๊ฐ๋ ์ผ๋ก ์ฑํ๋์์ผ๋ฉฐ "anyarray"๋ ์ด๋ฏธ "ndarray์ ๊ตฌํ์ ๊ณต์ ํ๋ ๊ฒ"์ ๊ฐ๋ ์ผ๋ก ์ฑํ๋์์ง๋ง has different semanticsโ๋ duck ๋ฐฐ์ด์ ๋ฐ๋์ ๋๋ค (์ : np.matrix๋โanyarrayโ์ด์ง๋งโduck arrayโ๋ ์๋). ์ด๊ฒ์ ๊ณ ์ ์ ์ธ ์์ ๊ฑฐ ์ฐฝ๊ณ ์ด๋ฏ๋ก ์ง๊ธ์ "์ค๋ฆฌ ๋ฐฐ์ด"์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ฐ๋ฅํ ์ต์ ์ผ๋ก๋ arrayish, pseudoarray, nominalarray, ersatzarray, arraymimic,โฆ
๋ค๋ฅธ ์ด๋ฆ ์์ด๋์ด : np.array_compatible()
, np.array_api()
....
np.array_compatible
๋ ์๋ ํ ์ ์์ง๋ง duckarray
๋ณด๋ค ์ข์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. np.array_api
์ซ์ด์, ์๋ชป๋ ์๊ฐ์ ํด์ imho.
์ค๋๋ง์ ๋ ๋์ ์ด๋ฆ์ด ๋์ค์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ง๋ "์ค๋ฆฌ ๋ฐฐ์ด"์ด๋ผ๋ ์ด๋ฆ์ ์ถ๋ณตํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค ...
๋๋ ํธํ๋๋ ๋จ์ด๋ฅผ ์ข์ํ๋ค. ์๋ง๋ ์ฐ๋ฆฌ๋ as_compatible_array
๋ฟ๋ง ์๋๋ผ ๊ทธ ๋ผ์ธ์ ๋ฐ๋ผ ๋ณํ ๋ ๊ฒ์ ์๊ฐํ ์์์ ๊ฒ์ด๋ค. (๋ค์ ํธํ๋๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค). as
์ (๋ถ๋ถ์ ์ผ๋ก๋ ๋ชจ๋ as
ํจ์์ ๊ณต๋ฐฑ์ด ์๊ธฐ ๋๋ฌธ์) ์ฑ ๊ฐ์ค ์ ์์ต๋๋ค. "duck"์ ๋์๊ด์์๋ ๋ฉ์ ธ ๋ณด์ด์ง๋ง ๋ฌด์์๋ก ๋ณด๋ ์ฌ๋๋ค์๊ฒ๋ ์กฐ๊ธ ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์ด ์คํธ๋ฆผ ์ฌ์ฉ์๊ฐ ๋ง์ด ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ์๋ง "duck"์ ์ซ์ดํ๋ค๊ณ ์๊ฐํฉ๋๋ค (์ : ๋ ์์ / ์์ ์คํ์ค์์ํ ์์ ๋๊ตฌ๋ฅผ ์์ฑํ๊ธฐ ์์ํ๋ ๊ฒฝ์ฐ์๋).
์๋ง๋ 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'>
๋ฐ๋ฉด์ NumPy์ API๋ฅผ ํตํด CuPy ๋ฐฐ์ด์ ์์ฑํ๋ ค๋ array_like
๊ฐ ์๋ค๋ฉด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
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 ํฌํจ ์ฌ๋ถ) ๋ค๋ฅธ ๋ฐฐ์ด์์ ๋ณต์ฌ๋ฉ๋๋ค.
2019 ๋
7 ์ 1 ์ผ ์์์ผ ์ค์ 5:40 Peter Andreas Entschev <
[email protected]> ์์ฑ :
์ฃผ์ ์ ๋ํด ์กฐ๊ธ ๋ ์ค๋ช ํ๊ธฐ ์ํด ๋ค๋ฃจ์ง ์์ ์ฌ๋ก๊ฐ ํ๋ ๋ ์์ต๋๋ค.
np.duckarray๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค.
np.empty_like์ ๊ฐ์ ํจ์๊ฐ ์ํํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ธฐ์กด ์ ํ์์.
ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.numpy๋ฅผ np๋ก, ํํผ๋ฅผ cp๋ก ๊ฐ์ ธ ์ค๊ธฐ >>> a = cp.array ([1, 2]) >>> b = np.ones_like (a) >>> type (b)
๋ฐ๋ฉด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์ถ์ array_like๊ฐ ์๋ค๋ฉด
NumPy์ API๋ฅผ ํตํ CuPy ์ด๋ ์ด๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค
๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ๋ ๊ฒ์ด ๋์์ด๋ฉ๋๋ค.numpy๋ฅผ np๋ก, cupy๋ฅผ cp๋ก ๊ฐ์ ธ ์ค๊ธฐ
a = cp.array ([1, 2])
b = [1, 2]
c = np.asarray (b, like = a)์ด๊ฒ์ ๋ํ ์์ด๋์ด / ์ ์์ด ์์ต๋๊น?
โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVRCWDHRAXHHRDHXXM3P5H3LRA5CNFSM4H3HQWAKYY3PNVWWK3TUL52HS4DFWSVREXG43VMVORBW63LN5WWWY702 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
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 ์ด์์ ์ ์ถํ ๊ฒ์
๋๋ค.
๋๋จํด, ๊ณ ๋ง์ ํผํฐ!
2019 ๋
7 ์ 1 ์ผ ์์์ผ ์ค์ 9:29 Peter Andreas Entschev <
[email protected]> ์์ฑ :
์ข์ต๋๋ค. ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ทํ์ ํ๊ฒฌ ์ ์์ ๋์ํฉ๋๋ค. ๋๋
NEP์์ np.duckarray ๋ฐ
np.copy_like ๋ฐ ์ด๋ฒ ์ฃผ PR ์ด์์ ์ ์ถํ์ญ์์ค.โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVW2YUBNUCJZK6JWDBTP5IWHNA5CNFSM4H3HQWAKYY3PNVWWK3TUL52HS4DFWSVREXG43ZVMV3QW63LNMVXHJW63LNMVXHJW63LNMVXHJK
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAJJFVR2KTPAZ4JPWDYYMFLP5IWHNANCNFSM4H3HQWAA
.
์ด ์์ ์ ๋ํ ์์ด๋์ด์ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
array_like
๋ฐ copy_like
ํจ์๋ ๊ธฐ๋ณธ ๋ค์ ์คํ์ด์ค์์๋ ๊ฒ์ด ์ฝ๊ฐ ์ด์ ํ ๊ฒ์
๋๋ค. cupy / dask / sparse / etc), ๋ง์ต๋๊น? ์ฌ์ ์ ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉํฉ๋๋ค. ์๋๋ฉด ์ฌ๊ธฐ์ ์์์ ๋น numpy ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ฌ์ค, ์ด๊ฒ์ ์ค๋ฆฌ ํ์ดํ์ ์ง์ํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ์ค์ ๋ก ์ ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ np.duckarray
๋ฐ np.copy_like
์ธ์๊ฐ NumPy ๋ฐฐ์ด ์ธ ๊ฒฝ์ฐ์๋ ์๋ํฉ๋๋ค. np.array
/ np.copy
ํฉ๋๋ค.
๋ชจ๋ ๋ฐฐ์ด ๊ตฌํ์๋ copy
๋ฉ์๋๊ฐ ์์ต๋๊น? copy_like
๋์ ์ฌ์ฉํ๋ฉด ์๋ํ๋ฏ๋ก ์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
array_like
ํ์์ฑ์ ์ ์ ์์ง๋ง ์ด๋์ ๋ฃ์์ง ๋
ผ์ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.
np.duckarray
์ด (๊ฐ) ์ดํด๊ฐ๋ฉ๋๋ค.
๋๋ np.copy_like์ np.duckarray (๋๋ ์ฐ๋ฆฌ๊ฐ ๋ถ๋ฅด๋ ๋ฌด์์ด๋ )๋ฅผ NEP 22์ ๊ฐ์ "Informational"์ด ์๋ NEP 18๊ณผ ๊ฐ์ ๊ท๋ฒ์ ์ธ ์ค๋ฆฌ ๋ฐฐ์ด์ ๊ฐ์ / ์์ฑํ๋ ์๋ก์ด NEP์ ํจ๊ป ๋ฃ๋์ชฝ์ผ๋ก ๊ธฐ์ธ์ผ ๊ฒ์ ๋๋ค.
+1
array_like์ ๋ํ ํ์์ฑ์ ์ ์ ์์ง๋ง ์ด๋์ ๋ฃ์์ง ๋ ผ์ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.
์ค์ ๋ก np.copy_like
์ ๊ฐ์ด ๋ค๋ฃจ๊ณ ์ถ์ ๊ฒฝ์ฐ์
๋๋ค. ํ
์คํธํ์ง๋ ์์์ง๋ง ๋ฐฐ์ด์ด NumPy๊ฐ ์๋ ๊ฒฝ์ฐ np.copy
์ด๋ฏธ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
๋ช
ํํํ๊ธฐ ์ํด np.array_like
ํจ์๋ ์ธ๊ธํ๊ณ ์์ต๋๊น? array_like
-arrays์ ๋ํ ๊ธฐ์กด์ ๋ชจ๋ ์ฐธ์กฐ๊ฐ ํผ๋ ๋ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๊ทธ๋ฌํ ์ด๋ฆ์ ํผํ์ต๋๋ค. ๊ทธ๋ฌ๋, ๋๋ ์ด์ ๊นจ๋ซ๋๋ค np.copy_like
ํ์ํ ์ฌ๋ณธ์ ์๋ฏธ ํ ์ ์์ผ๋ฉฐ, ๋๋ ๊ทธ๊ฒ์ด ์ ์ฌํ ํ๋ํด์ผํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ np.asarray
๊ฐ ์ด๋ฏธ NumPy์ ์๋๋ผ๋ฉด ๋ณต์ฌ ๋ง ๋ฐ์, ์ ๋ ฌ. ์ฌ๊ธฐ์์ ์ค๋ช
ํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ np.copy_like(a, like=b)
์ ๊ฐ์ ํธ์ถ์์ a
๊ฐ b
์ ๋์ผํ ์ ํ์ด ์๋ ๊ฒฝ์ฐ์๋ง ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค.
ํ ์คํธํ์ง๋ ์์์ง๋ง ๋ฐฐ์ด์ด NumPy๊ฐ ์๋ ๊ฒฝ์ฐ
np.copy
์ด๋ฏธ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
__array_function__
์ ์ง์ํ๋๋ก ์ฅ์๋์ด ์์ด์ผํฉ๋๋ค.
๋ช ํํํ๊ธฐ ์ํด
np.array_like
ํจ์๋ ์ธ๊ธํ๊ณ ์์ต๋๊น? array_like-arrays์ ๋ํ ๊ธฐ์กด์ ๋ชจ๋ ์ฐธ์กฐ์ ํผ๋์ ์ค ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๊ทธ๋ฌํ ์ด๋ฆ์ ํผํ์ต๋๋ค.
์. ๊ทธ๋ฆฌ๊ณ ๋ค, ํผ๋ ์ค๋ฌ์ธ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์
np.copy_like
๊ฐ ํ์ํ ์ฌ๋ณธ์ ์๋ฏธ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์, ๊ทธ ์ด๋ฆ์ ๋ฐ์ดํฐ ์ฌ๋ณธ์ ์๋ฏธํฉ๋๋ค.
ํ์ํ ์ฌ๋ณธ์ ์์ ํ ์ ์์ผ๋ฉฐ
np.asarray
์ ์ ์ฌํ ๋์์ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด np.duckarray
๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์์ Peter์ ์๊ฐ ์ด๊ฒ์ ๋ช
ํํํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋จ์์ฑ์ ์ํด ์๋์์ ๋ณต์ฌํ๊ณ 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 ๋ฐฐ์ด๋ก ์ด์ด์ง). ์๋ฅผ ๋ค์ด Python ๋ชฉ๋ก์์ CuPy ๋ฐฐ์ด์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. array_like
๋ํด CuPy (๋๋ ๋ค๋ฅธ like=
๋ฐฐ์ด)๋ก ์ ๋ฌํ ์์๋ ํจ์๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค.
์ ๋ฐ์ดํธ ๋ ์์ ์ ๋ํด @jakirkham ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
c = np.copy_like(b, like=a)
๊ทธ๋ฌ๋ฉด a.__array_function__
๋ฅผ ํตํด CuPy๋ก ์ ๋ฌ๋๊ณ ํด๋น ์์ฑ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ์คํจํฉ๋๊น (์ : a=<scipy.sparse matrix>
์๋ํ์ง ์์)? ์ด๋ฌํ ์ข
๋ฅ์ ์์
์ ์ํด ์๋ก์ด ๋ค์ ์คํ์ด์ค ๋๋ ์๋ก์ด ์ํธ ์ด์ฉ์ฑ ์ ํธ๋ฆฌํฐ ํจํค์ง๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์๋๋ฉด ๊ฐ๋จํ๊ฒ ํ ์์๋๋ณด๋ค ์์ ํ ๊ธฐ๋ฅ์ ๋ฏธ๋ ๋์คํจ์น ๋ฉ์ปค๋์ฆ์ ๋งก๊ธฐ์ญ์์ค.
with cupy_backend:
np.array(b)
NumPy ์์ฒด๊ฐ __array_function__
์ ์ ํ์ ์ฐํํ๋ ์์
์ ์ง์ํ์ง ์๋ ๋ฉ์ธ ๋ค์ ์คํ์ด์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์
ํ๋ ๊ฒ์ ์ฝ๊ฐ ๋น์ ์์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค ....
๊ทธ๋ฌ๋ฉด
a.__array_function__
๋ฅผ ํตํด CuPy๋ก ์ ๋ฌ๋๊ณ ํด๋น ์์ฑ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ์คํจํฉ๋๊น (์ :a=<scipy.sparse matrix>
์๋ํ์ง ์์)?
๋ฐ๋์ ์คํจํด์ผํ๋ค๊ณ ๋งํ์ง๋ ์๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก NumPy๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค (๋๋ ์ ํ ๋ฐ์์ํค์ง ์์).
์ด๋ฌํ ์ข ๋ฅ์ ์์ ์ ์ํด ์๋ก์ด ๋ค์ ์คํ์ด์ค ๋๋ ์๋ก์ด ์ํธ ์ด์ฉ์ฑ ์ ํธ๋ฆฌํฐ ํจํค์ง๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์๋๋ฉด ๋ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฏธ๋ ๋์คํจ์น ๋ฉ์ปค๋์ฆ์ ๋งก๊ธฐ์ญ์์ค.
ํ์คํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋์คํจ์น ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ ๊ฒ์ด ์ข๊ฒ ์ง ๋ง, ๋ณต์ก์ฑ๊ณผ ํ์ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด ์ด์ ์ ์ํ๋์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ํ ๋ก ์ด ์ผ์ด ๋ฌ์ ๋ ์ฃผ๋ณ์ ์์๊ธฐ ๋๋ฌธ์ ์ถ์ธก ๋งํ์ต๋๋ค.
NumPy ์์ฒด๊ฐ __array_function__์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์ง์ํ์ง ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ฉ์ธ ๋ค์ ์คํ์ด์ค์ ๋์ ํ๋ ๊ฒ์ ์ฝ๊ฐ ๋น์ ์์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค ....
๋๋ ๋น์ ์ ์์ ์ ํ์คํ ์๊ณ ์์ง๋ง, ์ฐ๋ฆฌ๊ฐ ๋ฉ์ธ ๋ค์ ์คํ์ด์ค์์ ๋๋ฌด ๋ง์ ๊ฒ์ ์ฎ๊ธฐ๋ฉด ์ฌ์ฉ์๋ค์ด ๊ฒ์ ๋จน์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ฉ๋ฉด ๋ด๊ฐ ํ๋ ธ์ ์๋ ์๊ณ ์ด๊ฒ์ ๋จ์ง ์ธ์ ์ผ๋ฟ์ ๋๋ค. ์ด๋ ์ชฝ์ด๋ , ๋๋ NumPy์ ํจ๊ป ์๋ํ์ง ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒ์ ์ ํ ์ ์ํ์ง ์์์ง๋ง NumPy๋ฅผ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ๋ ์ ๋์ ์ผ๋ก ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
NumPy ์์ฒด๊ฐ __array_function__์ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์ง์ํ์ง ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ฉ์ธ ๋ค์ ์คํ์ด์ค์ ๋์ ํ๋ ๊ฒ์ ์ฝ๊ฐ ๋น์ ์์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค ....
์ค์ ๋ก ์ด๋ฐ ์๋ฏธ์์ np.duckarray
๋ฉ์ธ ๋ค์ ์คํ์ด์ค์ ์ํ์ง ์์ต๋๋ค.
์ค์ ๋ก ์ด๋ฐ ์๋ฏธ์์
np.duckarray
๋ฉ์ธ ๋ค์ ์คํ์ด์ค์ ์ํ์ง ์์ต๋๋ค.
๋๋ ํ๋๊ฐ ๋ ๋ฐฉ์ด ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค ( asarray
์ ์ ์ฌํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก "์ด๊ฒ์ ndarray์ ์ ์ฌํ ์ค๋ฆฌ ์ ํ์ ์ ์๋ฅผ ์ถฉ์กฑํฉ๋๊น"). ์ฐ๋ฆฌ๊ฐ array_function_dispatch
๋ ๊ณต๊ฐํ๊ณ ์ถ๊ณ np.lib.mixins.NDArrayOperatorsMixin
์๊ณ ๋ ๋ง์ ๋ฏน์ค ์ธ์ ์์ฑํ ๊ณํ์ด๋ผ๋ฉด ์ํธ ์ด์ฉ์ฑ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์์ํ ํ๋ช
ํ ์ ํ์ ๋ชจ๋์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
ํ์คํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋์คํจ์น ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ ๊ฒ์ด ์ข๊ฒ ์ง ๋ง, ๋ณต์ก์ฑ๊ณผ ํ์ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด ์ด์ ์ ์ํ๋์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ํ ๋ก ์ด ์ผ์ด ๋ฌ์ ๋ ์ฃผ๋ณ์ ์์๊ธฐ ๋๋ฌธ์ ์ถ์ธก ๋งํ์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. __array_function__
๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ์ ์ฌํ๋ฏ๋ก ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ค๋ฒ ํค๋๊ฐ ์ ์ต๋๋ค. 6 ๊ฐ์ ์ด๋ด์ ์ค๊ณํ๊ณ ๊ตฌํํ ์ ์์๊ณ
์ํธ ์ด์ฉ์ฑ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์์ํ ํฉ๋ฆฌ์ ์ธ ์ ํ์ ๋ชจ๋์ด ์๋ฏธ๊ฐ์์ ์ ์์ต๋๋ค.
๋์๊ฒ ์ง์ง ์ด์๊ฐ ์์ต๋๋ค. ์๋ฌด๋ฐ๋์๋ ๊ฒ๋ณด๋ค๋ ์ด๋๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ด ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. :)
์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. __array_function__์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ๋น์ทํ๋ฏ๋ก ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ค๋ฒ ํค๋๊ฐ ์ ์ต๋๋ค. 6 ๊ฐ์ ์ด๋ด์ ์ค๊ณํ๊ณ ๊ตฌํํ ์ ์์๊ณ
๊ทธ๋ฌ๋ __array_function__
๋ ๊ด๋ฒ์ํ๊ฒ ํ์ฉํ๋ ค๋ฉด np.duckarray
๋ฐ np.copy_like
(๋๋ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ก ๊ฒฐ์ )๊ณผ ๊ฐ์ ๊ฒ์ ๊ตฌํํ๋ ๋ค๋ฅธ ๋์์ด ์์ต๋๊น? ๋๋ ๋ชจ๋ ๋์์ ๊ฐ๋ฐฉ์ ์ด์ง๋ง, ๋น์ฅ์ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋์คํจ์น ๋ฐฉ์๋ณด๋ค๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ __array_function__
์ ๋ฒ์๋ฅผ ์ ํ ํ ๊ฐ๋ฅ์ฑ์ด์๋ ๊ฒ๋ณด๋ค ๋น์ฅ์ ์๋ฌด๊ฒ๋ ๋ณด์ง ๋ชปํฉ๋๋ค
๊ทธ๋ฌ๋
__array_function__
๋ ๊ด๋ฒ์ํ๊ฒ ํ์ฉํ๋ ค๋ฉดnp.duckarray
๋ฐnp.copy_like
(๋๋ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ก ๊ฒฐ์ )๊ณผ ๊ฐ์ ๊ฒ์ ๊ตฌํํ๋ ๋ค๋ฅธ ๋์์ด ์์ต๋๊น?
์ผ๋ถ ์ฌ์ฉ ์ฌ๋ก์์ 80 % ์ด์์ ์ฌ์ฉ ์ฌ๋ก๋ก ์ด๋ํ๋ ค๋ฉด ์ด์ ๊ฐ์ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ ์ธํธ๊ฐ ์ค์ ๋ก ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ ์ฃผ์์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฉ์ธ ๋ค์ ์คํ์ด์ค๋ฅผ ์ด์์ ํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ข์ํ์ง ์์ผ๋ฏ๋ก ๋ ๋์ ์ฅ์๋ฅผ ์ฐพ์ ๊ฒ์ ์ ์ํฉ๋๋ค.
๋๋ ๋ชจ๋ ๋์์ ๊ฐ๋ฐฉ์ ์ด์ง๋ง, ๋น์ฅ์ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋์คํจ์น ๋ฐฉ์๋ณด๋ค๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ
__array_function__
์ ๋ฒ์๋ฅผ ์ ํ ํ ๊ฐ๋ฅ์ฑ์ด์๋ ๊ฒ๋ณด๋ค ๋น์ฅ์ ์๋ฌด๊ฒ๋ ๋ณด์ง ๋ชปํฉ๋๋ค
๋ด ๋ง์, ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ๋ช
๋ฐฑํ ๊ตฌ๋ฉ์ ๋ง๋ ๊ฒ์
๋๊น? "๋ ๋ณต์กํ ๊ฒฝ์ฐ"๋ฅผ ๋ชจ๋ ๋ค๋ฃจ์ง๋ ์์ ๊ฒ์
๋๋ค. np.errstate
๋๋ np.dtype
๋ฅผ ์ฌ์ ์ํ๋ ค๋ ๊ฒฝ์ฐ ํ๋กํ ์ฝ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์์๋ ์ด๋ฌํ ํ์์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
๋์์ผ๋ก, uarray ๋ ์์ง ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์ค๋ฒ ํค๋๊ฐ NumPy์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ ์์์๋งํผ ์ถฉ๋ถํ ๋ฎ์์ง ๊ฒ์ด๋ผ๊ณ ํ์ ํ์ง ๋ชปํ์ง๋ง, ์ ์ ๊ฐ๊น์์ง๊ณ ์์ผ๋ฉฐ scipy.fft
๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค https://github.com/Quansight-Labs/uarray/tree/master/unumpy
uarray๋ฅผ ์ฌ์ฉํ ํ๊ฒฌ ์ ๊ทผ ๋ฐฉ์์ ํ์คํ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ๋ฉํ ์ด๋ ์ด (Dask, xarray ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ฌ์ ํ ์ฐ๋ คํ๊ณ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ์ค๋ช ์ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ํ์คํ์ง ์์ต๋๋ค (ํ์ง๋ง ๋ญ๊ฐ ๋์น ๊ฒฝ์ฐ ์์ ํด์ฃผ์ธ์). ์ ๋ SciPy์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๋ํ๊ณ ํด์ํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์์ด ์ค๋ช ์ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ํ์คํ์ง ์์ต๋๋ค (ํ์ง๋ง ๋ญ๊ฐ ๋์น ๊ฒฝ์ฐ ์์ ํด์ฃผ์ธ์).
์ง๋์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํด๊ฒฐ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ํ์คํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์ค๋ ๋์ ๋งก๊ธฐ๊ฒ ์ต๋๋ค.
์ ๋ SciPy์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๋ํ๊ณ ํด์ํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๋ด๊ฐ ๊ฑฐ๊ธฐ์์ ๊ฒ, ์ง์ ๋ง๋์ ๋ฐ๊ฐ์์.
np.coerce_like()
๋๋ np.cast_like()
๊ฐ copy_like
๋ณด๋ค ๋ ๋์ ์ด๋ฆ ์ผ ์ ์์ผ๋ฏ๋ก ๋ณต์ฌ๋ณธ์ด ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค. ์ํ๋ ๊ธฐ๋ฅ์ ์ค์ ๋ก .cast()
๋ฉ์๋์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋จ, ๋ฐฐ์ด ์ ํ๊ณผ dtype์ ๋ณํํ๋ ค๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ํ๋กํ ์ฝ์ด ์๋ ํจ์ ์ฌ์ผํ๋ฏ๋ก ๋ ์ธ์๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
uarray๋ฅผ ์ฌ์ฉํ ํ๊ฒฌ ์ ๊ทผ ๋ฐฉ์์ ํ์คํ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ๋ฉํ ์ด๋ ์ด (Dask, xarray ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ฌ์ ํ ์ฐ๋ คํ๊ณ ์์ต๋๋ค.
uarray
์ (๋) ์ฌ๋ฌ ๋ฐฑ์๋๋ฅผ ์ง์ํ๋ฏ๋ก ์ด์ ๊ฐ์ ๊ฒ์ด ์๋ํฉ๋๋ค.
with ua.set_backend(inner_array_backend), ua.set_backend(outer_array_backend):
s = unumpy.sum(meta_array)
์ด๋ ๊ตฌํ ๋ด์์ ๋ฉํ ๋ฐฐ์ด์ด ua.skip_backend
ํธ์ถํ๋๋กํ๊ฑฐ๋ ๋ฉํ ๋ฐฐ์ด์ ๋ฐฑ์๋๊ฐ ์ ํ ๋ถ์ผ์น์ NotImplemented
๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ์ํ ํ ์ ์์ต๋๋ค.
์ฐธ์กฐ : @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์ ๋ํด ์๋ ค ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
ํ์ง๋ง ๋ด๊ฐ ๋ณด๋ ๊ฒ์ฒ๋ผ ๊ณ์ฐ์ ์์ํ๊ธฐ ์ ์ ์ ์ ํ ๋ฐฑ์๋๋ฅผ ์ค์ ํด์ผํฉ๋๋ค. ๋ง์ต๋๊น? __array_function__
์ ์ฅ์ ์ค ํ๋๋ Dask๊ฐ CuPy์ ์กด์ฌ๋ฅผ ์ ํ์๊ฐ์๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ํ ๋ฌด๊ด ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
@pentschev ์ด๊ฒ์ ๋ฐฑ์๋๋ฅผ "๋ฑ๋ก"ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์ต๊ทผ๊น์ง์ ๊ฒฝ์ฐ ์์ง๋ง NumPy (๋๋ ์ฐธ์กฐ ๊ตฌํ) ๋ง์ด๋ฅผ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ฉด Dask๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ํ๋์ set_backend ๋ง ํ์ํฉ๋๋ค.
๊ทธ๊ฒ์, ๋ด๊ฐ์ด ์ธ๊ธ @rgommers ๋ฌด์์ ์ถ์ธก์์ด https://github.com/numpy/numpy/issues/13831#issuecomment , -507432311์ ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฆฌํค๋ https://github.com/Quansight-Labs/uarray / tree / master / unumpy.
๋๋ฌด ๋ง์ ์ง๋ฌธ์ ๋ํด ์ฃ์กํฉ๋๋ค.ํ์ง๋ง ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด NumPy ๋ฐ Sparse์ ๊ฐ์ ๋ค์ํ ๋ฐฑ์๋์ ์์กดํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ผ ๋ชจ๋ ๊ฒ์ด NumPy ์ ์ฉ, Sparse ์ ์ฉ ๋๋ ๋ ๋ค ํผํฉ ๋ ์ ์์ต๋๋ค. @ peterbell10 ์ ์ฌ๋ฌ ๋ฐฑ์๋๊ฐ ์ง์ https://github.com/numpy/numpy/issues/13831#issuecomment -507458331 ๊ทธ๋ฌ๋ ๋ฐฑ์๋ ์ ํ์ ์๋์ผ๋ก ํ ์ ์์ต๋๊น? ์๋๋ฉด ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผํฉ๋๊น?
๋ฐ๋ผ์์ด ๊ฒฝ์ฐ ์ด์์ ์ผ๋ก๋ NumPy๋ฅผ ๋ฑ๋กํ๊ณ Sparse ์ฉ ์ปจํ
์คํธ ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ ํ ๊ฒฝ์ฐ sparse์์ NotImplemented
๋ฅผ ๋ฐํํ๋ฉด NumPy๋ก ๋์ฒด๋ฉ๋๋ค.
SciPy์์ @rgommers , @danielballan , ๊ทธ๋ฆฌ๊ณ ๋ ์์ ์ด์ด ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. duckarray
(ํด๋น ์ด๋ฆ ์ฌ์ฉ)์ ๊ณ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๊ฒฐ๋ก ์ง์์ต๋๋ค. ์ฆ, ์ด๊ฒ์ 1.18๋ก ์์ ๋ ๊ฒ์ฒ๋ผ ๋ค๋ ธ์ต๋๋ค. ๋ด๊ฐ ์๋ชป ์ดํดํ๋ฉด ๋๋ฅผ ๋ฐ๋ก ์ก์์ฃผ์ธ์. ์ด๊ฒ์ ๊ฐ์ํ ๋ PR์ ์์ํด๋ ๊ด์ฐฎ์๊น์?
duckarray
(ํด๋น ์ด๋ฆ ์ฌ์ฉ)์ ๊ณ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๊ฒฐ๋ก ์ง์์ต๋๋ค. ์ฆ, ์ด๊ฒ์ 1.18๋ก ์์ ๋ ๊ฒ์ฒ๋ผ ๋ค๋ ธ์ต๋๋ค. ๋ด๊ฐ ์๋ชป ์ดํดํ๋ฉด ๋๋ฅผ ๋ฐ๋ก ์ก์์ฃผ์ธ์. ์ด๊ฒ์ ๊ฐ์ํ ๋ PR์ ์์ํด๋ ๊ด์ฐฎ์๊น์?
์ด ๋ชจ๋ ๊ฒ์ด ๋์๊ฒ๋ ํ๋ฅญํ๊ฒ ๋ค๋ฆฌ์ง๋ง ์ ํํ ์ ์์ ์ค๋ช ํ๋ ์งง์ NEP๋ก ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://github.com/numpy/numpy/issues/13831#issuecomment -507334210 ์ฐธ์กฐ
๋น์ฐํฉ๋๋ค. ๐
์ด์ ์ ์ ๊ธฐ ๋ ์นดํผ ์์ ์ ๊ธฐ์กด ๋ฉ์ปค๋์ฆ์ผ๋ก ํด๊ฒฐ๋์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํนํ์ด ๋ผ์ธ์ ์ด๋ป์ต๋๊น?
a2 = np.empty_like(a1)
a2[...] = a1[...]
๋ถ๋ช ํ ์ด๊ฒ์ ํ ์ค๋ก ์ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ฏธ ํด๋น ์ฌ์ฉ ์ฌ๋ก์์ ์๋ํ๋์ง ๋๋ ๋๋ฝ ๋ ๊ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฐ๋ฆฌ๋ (ํด๋น ์ด๋ฆ์ ์ฌ์ฉํ์ฌ) duckarray๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ๊ฒฐ๋ก ์ง์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด ๋์๊ฒ๋ ํ๋ฅญํ๊ฒ ๋ค๋ฆฌ์ง๋ง ์ ํํ ์ ์์ ์ค๋ช ํ๋ ์งง์ NEP๋ก ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. # 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์์ ์ ์ํ ์์ด๋์ด ๋ฅผ ๋ค์ ๊ฒํ ํ๊ณ ์ถ์์ง ๊ถ๊ธํฉ๋๋ค.
์ฌ๊ธฐ์๋ ์์ฒด ํ๋กํ ์ฝ์ด ํ์ํฉ๋๋ค.
...
array์ asarray๋ ์ค์ numpy.ndarray ๊ฐ์ฒด๋ก ๊ฐ์ ๋ณํํ๊ธฐ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์ ๋ฐฉ๋ฌธํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ ์ค๋ ๋๋ฅผ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ด๋์ด, ์ ์, ์ด์๊ฐ ์์ต๋๊น?
์์ ์๊ฒฌ์ ๋ช ํํํ๊ธฐ ์ํด ์๋ก์ด ํ๋กํ ์ฝ์ด ์ข์ ์์ด๋์ด์ธ์ง (์๋ง๋ ์์ํ์ง ๋ชปํ๋ ๋ง์ ์ฑ๊ฐ์ ์ธ๋ถ ์ฌํญ์ด ํฌํจ๋์ด ์๋์ง) ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ ์ฐ๋ฆฌ๊ฐ ๋ค์ ๊ฒํ ํ๊ณ ๋ ผ์ํด์ผํ๋ ์์ด๋์ด์ธ์ง ๊ถ๊ธํฉ๋๋ค. .
SciPy'19์ ๊ฐ๋ฐ ํ์ ๋ฐ ์คํ๋ฆฐํธ์ ํฉ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ๊ธฐ ์ ์ 1.17.0์ ๋ฌธ ๋ฐ์ผ๋ก ๊บผ๋ด ์ค์ ๊ฒฝํ์ ์ป์ผ์ญ์์ค.
๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ๊ฒํ ํ๊ณ ๋ ผ์ํด์ผํ๋ ์์ด๋์ด์ธ์ง ์ ๋ง๋ก ๊ถ๊ธํฉ๋๋ค.
์๋ง๋ ์,ํ์ง๋ง ๋ช ๋ฌ ํ์.
์๋ง๋ ์,ํ์ง๋ง ๋ช ๋ฌ ํ์.
์ข์, ๋ต์ฅ์ ๋ณด๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ด์ ์ ์ ๊ธฐ ๋ ์นดํผ ์์ ์ ๊ธฐ์กด ๋ฉ์ปค๋์ฆ์ผ๋ก ํด๊ฒฐ๋์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํนํ์ด ๋ผ์ธ์ ์ด๋ป์ต๋๊น?
a2 = np.empty_like(a1) a2[...] = a1[...]
๋ถ๋ช ํ ์ด๊ฒ์ ํ ์ค๋ก ์ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ฏธ ํด๋น ์ฌ์ฉ ์ฌ๋ก์์ ์๋ํ๋์ง ๋๋ ๋๋ฝ ๋ ๊ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด๊ฒ๊ณผ ๊ด๋ จ๋ ๋ด ์ฃผ์ ๋ฌธ์ ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ค๋ฆฌ ๋ฐฐ์ด์์๋ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ NumPy์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ํ ๋น ํ ๋ค์ ์ฑ์ฐ๋ ์ถ๊ฐ ๋น์ฉ์ด ๊ฑฐ์ 0 ์ผ ์ ์์ง๋ง ๋ชจ๋ ์ค๋ฆฌ ๋ฐฐ์ด์ ํด๋นํ๋ ๊ฒ์ ์๋๋๋ค.
์ด์ ์ ์ ๊ธฐ ๋ ์นดํผ ์์ ์ ๊ธฐ์กด ๋ฉ์ปค๋์ฆ์ผ๋ก ํด๊ฒฐ๋์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํนํ์ด ๋ผ์ธ์ ์ด๋ป์ต๋๊น?
a2 = np.empty_like(a1) a2[...] = a1[...]
๋ถ๋ช ํ ์ด๊ฒ์ ํ ์ค๋ก ์ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ฏธ ํด๋น ์ฌ์ฉ ์ฌ๋ก์์ ์๋ํ๋์ง ๋๋ ๋๋ฝ ๋ ๊ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋ ๊ฒ ํ ์๋ ์์ง๋ง ํน๋ณํ ๋ณต์ฌ ๋ ผ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค (์ : CuPy cupy / cupy # 2079 ).
์ฆ, ์ด๋ฌํ ์ข ๋ฅ์ ์ถ๊ฐ ์ฝ๋๊ฐ ํ์ํ์ง ์๋๋กํ๋ ค๋ฉด ๋ณต์ฌ ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ฐ๋ฉด์ ์ด๊ฒ์
asarray
๋ํ ์ผ์ข ์ ๋์ฒด๋ฌผ์ ๋๋ค. ๊ทธ๋์copy_like
์๋ก์ด ๊ธฐ๋ฅ ๋์ NEP-18์์ ์ ์ํ ์์ด๋์ด ๋ฅผ ๋ค์ ๊ฒํ ํ๊ณ ์ถ์์ง ๊ถ๊ธํฉ๋๋ค.์ฌ๊ธฐ์๋ ์์ฒด ํ๋กํ ์ฝ์ด ํ์ํฉ๋๋ค.
...
array์ asarray๋ ์ค์ numpy.ndarray ๊ฐ์ฒด๋ก ๊ฐ์ ๋ณํํ๊ธฐ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.๋ค์ ๋ฐฉ๋ฌธํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ ์ค๋ ๋๋ฅผ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ด๋์ด, ์ ์, ์ด์๊ฐ ์์ต๋๊น?
์ ํ๋กํ ์ฝ๋ก np.array
๋๋ np.asarray
์ ๋์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ค์ ํ๋ฆฝ ๋ ์๋ฏธ๋ NumPy ๋ฐฐ์ด๋ก ์บ์คํธํ๋ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก np.duckarray
๊ฐ ํ์ํฉ๋๋ค.
์ฆ, duckarray
like
์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ์๋ง๋ ์ฌ์ฉํ๋ - ์ฆ, ์์ ๋จ์ํ ์ ์์์ ํ๋กํ ์ฝ์ ๋ณ๊ฒฝ ํ์ __array_function__
๋์ ๊ฐ์ ์ ์ฉ ํ๋กํ ์ฝ __duckarray__
? ๋๋ ์ด๊ฒ์ ์ ๋ง๋ก ์๊ฐํ์ง ์์๋ค.
์ด์ ์ ์ ๊ธฐ ๋ ์นดํผ ์์ ์ ๊ธฐ์กด ๋ฉ์ปค๋์ฆ์ผ๋ก ํด๊ฒฐ๋์ง ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํนํ์ด ๋ผ์ธ์ ์ด๋ป์ต๋๊น?
a2 = np.empty_like(a1) a2[...] = a1[...]
๋ถ๋ช ํ ์ด๊ฒ์ ํ ์ค๋ก ์ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ฏธ ํด๋น ์ฌ์ฉ ์ฌ๋ก์์ ์๋ํ๋์ง ๋๋ ๋๋ฝ ๋ ๊ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด๊ฒ๊ณผ ๊ด๋ จ๋ ๋ด ์ฃผ์ ๋ฌธ์ ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ค๋ฆฌ ๋ฐฐ์ด์์๋ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ NumPy์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ํ ๋น ํ ๋ค์ ์ฑ์ฐ๋ ์ถ๊ฐ ๋น์ฉ์ด ๊ฑฐ์ 0 ์ผ ์ ์์ง๋ง ๋ชจ๋ ์ค๋ฆฌ ๋ฐฐ์ด์ ํด๋นํ๋ ๊ฒ์ ์๋๋๋ค.
๊ณต์ ํด. ์ฌ์ค ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ์ ๋จ์ํ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ ์ค๋๋ CuPy ๋ฐ Sparse์์ ์๋ํฉ๋๋ค.
a2 = np.copy(a1)
๊ณต์ ํด. ์ฌ์ค ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ์ ๋จ์ํ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ ์ค๋๋ CuPy ๋ฐ Sparse์์ ์๋ํฉ๋๋ค.
a2 = np.copy(a1)
์,ํ์ง๋ง "์ด ๋ ์ด๋ ์ด๋ฅผ ๋ค๋ฅธ ๋ ์ด๋ ์ด ์ ํ์ ๋ณต์ฌ"ํ๋ ๊ฒ๋ ์ํฉ๋๋ค.
์ ํ๋กํ ์ฝ๋ก
np.array
๋๋np.asarray
์ ๋์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ๊ทธ๋ค์ ํ๋ฆฝ ๋ ์๋ฏธ๋ NumPy ๋ฐฐ์ด๋ก ์บ์คํธํ๋ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋กnp.duckarray
๊ฐ ํ์ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ํ์ ์ด์๊ณ ,์ด ์ง๋ฌธ์ ์ ๊ธฐํ๋ ๊ฒ์กฐ์ฐจ ๊บผ๋ คํ๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ค๋๊น์งํ์ง ์์ ์ด์ ์ด๋ค.
์ฆ, duckarray์ like ์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ์์ ๋จ์ํ ๋ ์ ์์์ ํ๋กํ ์ฝ์ ๋ณ๊ฒฝํด์ผํฉ๋๋ค. __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
์ฃผ์๋ฅผ ๋์คํจ์นํ๋ฉด ๋ถ๋ณ ๋ฐฐ์ด์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋์ด๋ฅผ ์ ์ ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ๋ํ NumPy๊ฐ ๋จ์ํ ์ ๊ณตํ์ง๋ง ์ฌ์ฉํ์ง ์๋ ์๋ก์ด API๋ฅผ ์ถ๊ฐํ์ง ์์๋๋ฉ๋๋ค.
์ต๊ทผ ์ ์๊ฒ ๋ ์ค๋ฅธ ๋ ๋ค๋ฅธ ์๊ฐ์ ํ๋ฉดํํ๊ธฐ ์ํด ์ด๋ฌํ API๊ฐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๋ค์ด ์คํธ๋ฆผ์ ์๋ฏธํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์๊ฐํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค (์ : Dask์ Xarray์ ์ํธ ์์ฉ ๋ฐฉ์).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ง๋
quack_array
:)