__array_function__
๋์คํจ์น๋ฅผ โโ๊ฑด๋ ๋ธ ์ ์๋๋ก .__skip_array_function__
ํจ์ ์์ฑ์ ์ถ๊ฐํฉ๋๋ค. (https://github.com/numpy/numpy/pull/13389)numpy/core/overrides.py
์ผ๋ถ๋ฅผ ๋ค์ ๊ตฌํํฉ๋๋ค (https://github.com/numpy/numpy/issues/12028) :get_overloaded_types_and_args
array_function_implementation_or_override
ndarray.__array_function__
?array_function_dispatch
?numpy.core
np.core.defchararray
(# 12154)np.einsum
๋ฐ np.block
(https://github.com/numpy/numpy/pull/12163)numpy.lib
numpy.fft
/ numpy.linalg
(https://github.com/numpy/numpy/pull/12117)arange?
] (https://github.com/numpy/numpy/issues/12379)ndarray.__repr__
๋ __array_function__
(https://github.com/numpy/numpy/pull/12212)์ ์์กดํด์๋ ์๋ฉ๋๋ค.stacklevel
๋ฅผ 1 ์ฉ ๋๋ ค์ผํ๋ฏ๋ก ํธ๋ ์ด์ค ๋ฐฑ์ด ์ฌ๋ฐ๋ฅธ ์์น๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค (gh-13329).์ผ๋ถ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํ ์๋น "๋ชจ๋ ๊ณต์ฉ NumPy ๊ธฐ๋ฅ์ @array_function_dispatch๋ก ์ฅ์"์ ๋ณํฉํ๊ณ ํ๋กํ ์ฝ์ ๋ค์ด ์คํธ๋ฆผ ์๋น์์๊ฒ ์๋ํด ๋ณด๋๋ก ์์ฒญํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
https://github.com/numpy/numpy/pull/12099 ๋ณํฉํ๋ฉด numpy.core
๋๋ถ๋ถ์ ๋์คํจ์น ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐ ํ ๋ ๋ค๋ฅธ PR์ด ์ค๋น๋ฉ๋๋ค. ์์
์ ๋ง์น๋ ๊ฒ์ ๊ฝค ์ฌ์ธ ๊ฒ์
๋๋ค. ํ ์๊ฐ๋ ์ฑ ๊ฑธ๋ฆฌ์ง ์์์ต๋๋ค.
cc @ eric-wieser @mrocklin @mhvk @hameerabbasi
Python ๋ํผ๋ก ํจ์์ ๋ํ ๋ชจ๋ "์ฌ์ด"์ฌ์ ์๋ฅผ ๊ตฌํํ๋ ๋ด ๋ธ๋์น์ ๋ํด์๋ https://github.com/shoyer/numpy/tree/array-function-easy-impl ์ ์ฐธ์กฐ np.block
, np.einsum
๋ฐ ์์ ํ C๋ก ์์ฑ๋ ์์์ ๋ค์ค ๋ฐฐ์ด ํจ์์
๋๋ค (์ : np.concatenate
). # 12099๋ฅผ ์๋ฃํ๋ฉด ์ด๊ฒ์ ์ฌ๋ฌ PR๋ก ๋๋ ๊ฒ์
๋๋ค.
๊ฐ ๊ฐ๋ณ ํจ์์ ๋ํ ์ฌ์ ์ ํ ์คํธ๋ฅผ ์์ฑํ์ง ์์์ต๋๋ค. ์๋ฃ๋๋ฉด ๋ช ๊ฐ์ง ํตํฉ ํ ์คํธ (์ : ์ ์ฉ๋ ๋ชจ๋ ์์ ์ ๊ธฐ๋กํ๋ duck ๋ฐฐ์ด)๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ง๋ง ๊ฐ ๊ฐ๋ณ ํจ์์ ๋ํ ๋์คํจ์น ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์์ฐ์ ์ด์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. # 12099์ ๊ฒ์ฌ๋ ๋์คํจ์ฒ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํด์ผํ๋ฉฐ ๋์คํจ์ฒ ํจ์์ ๋ชจ๋ ์ฝ๋ ํ์ ๊ธฐ์กด ํ ์คํธ์ ์ํด ์คํ๋์ด์ผํฉ๋๋ค.
@shoyer- ํ
์คํธ์์ ๊ฐ ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํนํ ์ ์ฉํ์ง ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋์ numpy ๋ด์์ MaskedArray
์์ ๋น๊ต์ ๋น ๋ฅด๊ฒ ์ฌ์ ์ ์ฌ์ฉ์ ์์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
@mhvk ๋ ๋์๊ฒ MaskedArray ๋ฅผ ์ฌ์ฉ / ์๋ ๋ค๋ฅธ ์ฌ๋์ด ์ฃผ๋๊ถ์ ๊ฐ๋๋กํ๊ฒ ์ต๋๋ค.
https://github.com/numpy/numpy/pull/12115 , https://github.com/numpy/numpy/pull/12116 , # 12119 ๋ฐ https://github.com/numpy/numpy/pull/ ์ฐธ์กฐ Python์ ์ ์ ๋ ํจ์์ ๋ํด __array_function__
์ง์์ ๊ตฌํํ๋ PR์ ๊ฒฝ์ฐ 12117 .
@shoyer- ๊ตฌํ ์ค ์ผ๋ถ๋ฅผ ๋ณด๋ฉด ๋ ๊ฐ์ง ๊ฑฑ์ ์ด ์์ต๋๋ค.
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__
๋ฌด์"์ ๋์ฒด๋ฅผ ์ ๊ณตํ ์ง ์ฌ๋ถ๋ฅผ ์ค์ ๊ฒฝํ์ผ๋ก ๊ฒฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ์์ ์ ์์ต๋๋ค.
Re : ๋์คํจ์ฒ ์คํ์ผ๋ง : ์คํ์ผ์ ๋ํ ์ ํธ๋๋ ๋ฉ๋ชจ๋ฆฌ / ๊ฐ์ ธ ์ค๊ธฐ ์๊ฐ ๊ณ ๋ ค ์ฌํญ ๋ฐ ์์ธํ ์ ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋กํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์๋ช ์ด ๋์ผํ๊ฒ ์ ์ง ๋ ๊ฐ๋ฅ์ฑ์ด์๋ ๋์คํจ์ฒ๋ฅผ ๋ณํฉํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ต์ํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์บ์ ์ ์ค๋ ๋ ๋์์ง๋๋ค.
์ฆ, ๋๋ ๋๋ค ์คํ์ผ์ ๋๋ฌด ๋ฐ๋ํ์ง ์์ต๋๋ค.
๋์คํจ์ฒ ํจ์๋ฅผ ์์ฑํ๋ ์คํ์ผ์ ์ด์ ๋ช ๊ฐ์ง PR์์ ๋ํ๋ฉ๋๋ค. 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):
...
์ฅ์ :
๋จ์ :
TypeError: <lambda>() got an unexpected keyword argument 'x'
).@shoyer : "์ฝ๋ ์ค"์ธก๋ฉด์๋ณด๋ค ์ฌ์ค์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด 2 ์ค PEP8 ๊ฐ๊ฒฉ์ ์ถ๊ฐํ๋๋ก ํธ์ง๋์์ต๋๋ค.
์ค๋ฅ ๋ฉ์์ง ๋ฌธ์ ๋ ์ฝ๋ ๊ฐ์ฒด ๋ฅผ @nschloe ์ ์ฐธ์น๋ฅผ ์กฐ์ฌํ๊ณ ๋ถ์ ํ ๊ฐ์น๊ฐ์์ ๊ฒ์ ๋๋ค.
๋ค, ๋ฐ์ฝ๋ ์ดํฐ ๋ชจ๋์ ํจ์ ์ ์ ์์ฑ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค (์ฝ๋ ์์ฑ์ ์ฝ๊ฐ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉฐ exec()
์ฌ์ฉํ๋ค๋ ์ ์์ namedtuple๊ณผ ์กฐ๊ธ ๋ ๋น์ทํฉ๋๋ค).
์ค๋ฅ๊ฐ ํด๊ฒฐ๋์ง ์๋ ํ ๋ช
ํํ ์ด๋ฆ์ ๊ฐ์ง ๋์คํจ์ฒ๋ก ์ต์
์ ๊ณ ์ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์์ ์ด์ ๋ก ๋์คํจ์ฒ๋ฅผ ํจ๊ป ๋ฒ๋ค๋ก ๋ฌถ์ ๊ฒ์
๋๋ค (2), ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋งค์ฐ ์ผ๋์๋๊ณ ์์ผ๋ฏ๋ก ๋์คํจ์ฒ๋ฅผ _dispatch_on_x
์ ๊ฐ์ด ํธ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ค๋ฅ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ฉด ์ํฉ์ด ๋ฐ๋๋๋ค. ์๋ฅผ ๋ค์ด ์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ <lambda>
๋ฅผ ์์ธ ํ
์คํธ์ ํจ์ ์ด๋ฆ์ผ๋ก ๋ฐ๊พผ ๋ค์ ๋ค์ ๋ฐ์์ํค๋ ๊ฒ๋ง ํผ ๊ฐ๋จ ํ ์ ์์ต๋๋ค. (์๋๋ฉด ์์ฆ ๊ทธ ์ฒด์ธ์ด ์์ต๋๊น?)
์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ช ํํด์ผํ๋ฉฐ ์ด์์ ์ผ๋ก๋ ์ ํ ๋ณ๊ฒฝ๋์ง ์์์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์ข์, ์ง๊ธ์ ์ฝ๋ ์์ฑ์ด ์๋ํ์ง ์๋ ํ lambda
์ฌ์ฉ์ ๋ณด๋ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/numpy/numpy/pull/12175 ๋ Python ๋ํผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ค ๋ฐฐ์ด ํจ์ (C๋ก ์์ฑ)์ ๋ํ ์ฌ์ ์๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ ์ ์๋์ง์ ๋ํ ์ด์์ ์ถ๊ฐํฉ๋๋ค.
@mattip matmul
๋ฅผ ufunc๋ก ๊ตฌํํ ๋ ์ด๋์ ์์ต๋๊น? __array_function__
์ฌ์ ์๋ฅผ ๋ชจ๋ ์๋ฃํ๋ฉด NumPy์ ๊ณต์ฉ API๋ฅผ ์์ ํ ์ค๋ฒ๋ก๋ ํ ์ ์๋๋ก ๋ง๋๋ ๋ฐ ํ์ํ ๋ง์ง๋ง ์์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. NumPy 1.16์ ์ํด ๋ชจ๋ ์ค๋น๊ฐ๋์ด ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค!
NEP 20์ ๊ตฌํํ๋ PR # 11175๋ ์ฒ์ฒํ ์งํ๋๊ณ ์์ต๋๋ค. matmul ๋ฃจํ ์ฝ๋๊ฐ์๋ PR # 11133์ ์ฐจ๋จ๊ธฐ์ ๋๋ค. ์ด ์ฝ๋๋ ์ฌ์ ํ ์ ๋ฐ์ดํธ๋์ด์ผํ๋ฉฐ ์๋ก์ด ์ฝ๋๊ฐ ์ด์ ์ฝ๋๋ณด๋ค ๋๋ฆฌ์ง ์์์ ๋ฒค์น ๋งํฌ๋ฅผ ํตํด ํ์ธํด์ผํฉ๋๋ค.
์ ์ฒด ์ฌ์ ์ ์ธํธ๋ฅผ ์๋ฃํด์ผํ๋ ๊ฒํ ๋ฅผ ์ํด 4 ๊ฐ์ PR์ด ์์ต๋๋ค. ์ต์ข
๊ฒํ / ์ฌ์ธ ์คํ / ํฉ๋ณ์ ์ฃผ์๋ฉด ๋ณธ๊ฒฉ์ ์ผ๋ก __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
์ ์ฌ์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ช ๊ฐ์ง Pandas ํ
์คํธ๊ฐ ์คํจํ์ต๋๋ค (https://github.com/pandas-dev/pandas/issues/23172). ์์ง ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์คํ์ง ์์ง๋ง ์ถ์ํ๊ธฐ ์ ์ ํ์คํ ํ์
ํด์ผํฉ๋๋ค.
์ด๊ฒ์ด dask / pandas์์ ํ ์คํธ ์คํจ๋ฅผ ์ผ์ผํค๋ ์ด์ ๋ฅผ ๊ฐ์ฅ ์ ์ถ์ธก ํ๋ ค๋ฉด https://github.com/numpy/numpy/issues/12225 ๋ฅผ ์ฐธ์กฐ
์์ ์๊ฐ์ ์ผ๋ถ ๋ฒค์น ๋งํฌ (์๋ฆฌ๋ ์คํ ์ดํธ ๋๋ผ์ด๋ธ๊ฐ์๋ MacBook Pro์์) :
decorator.decorate
(# 12226) : 183.694ms๋ด ๋ฒค์น ๋งํฌ ์คํฌ๋ฆฝํธ
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 ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํฉ๋๋ค.
๋ชจ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์์ ์ ์ผ๋ก ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
2018 ๋
10 ์ 20 ์ผ ํ ์์ผ ์ค์ 6:56 Hameer Abbasi [email protected]
์ผ๋ค :
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ (์ / ํ)์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ๊ทธ๊ฒ์ ์ผ์ข ์ ์ ์ฉํฉ๋๋ค
ํนํ IoT ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/12028#issuecomment-431584123 ๋๋ ์์๊ฑฐ
์ค
https://github.com/notifications/unsubscribe-auth/ABKS1k_IkrJ2YmYReaDrnkNvcH2X0-ZCks5umyuogaJpZM4W3kSC
.
import numpy as np
ํฌํจํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ sleep ๋ฌธ์ ์ถ๊ฐํ๊ณ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถ์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. 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
์ ์ถ๊ฐํ๋ ๋ง์ง๋ง PR์
๋๋ค.
์ฐธ๊ณ ๋ก __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์ ์ฐธ์กฐ
๋น์ฐํ ๊ฐ์ฅ ํฐ ์ฑ๋ฅ ์ฐจ์ด๋ ๋ค๋ฅธ numpy ํจ์๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ ํจ์ (์ : np.block()
์
๋๋ค.
@shoyer- ๋๋ ์ฌ๋ถ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ ๊ฒ์ ์ฝ๊ฐ ๋นํฉํ๋ค ... ์๋ง, ์ฐ๋ฆฌ๋ ์ ๋ง๋ก C ๊ตฌํ์ ๊ฐ์ ธ์ผํ์ง๋ง, ๊ทธ ๋์ ๋๋ ๋จ์ง ํ๋์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์ํด ์ฝ๊ฐ์ ์๊ฐ์ ์ญ๊ฐํ๋ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ผ๋ก PR์ ๋ง๋ค์๋ค. ์ ํ ๋ฐ ์ ์ผํ ์ ํ์ด ndarray
. # 12321์ ์ฐธ์กฐํ์ญ์์ค.
@shoyer- ๋ฉ์ผ ๋ง๋ฆฌ์คํธ์์ ๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ต๋๋ค.
types
ํฉ๋๊น? (๋จ์ง ์ฌ์ ์๋ฅผ ์ ๊ณตํ๋ ์ธ์๋ณด๋ค๋) ๊ตฌํ์ ๋ํด ์๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค. (# 12327 ์ฐธ์กฐ).ndarray.__array_function__
๊ตฌํ์ __array_function__
๋ฅผ ์ฌ์ ์ํ๋๋ผ๋ ํ์ ํด๋์ค๋ฅผ ํ์ฉํด์ผํฉ๋๊น? ์ด๊ฒ์ Liskov ๋์ฒด ์์น์ ๊ณ ๋ คํ ๋ ํฉ๋ฆฌ์ ์ด๋ฉฐ ํ์ ํด๋์ค๊ฐ ์ด๋ฏธ ๋ณด์๊ธ์ ๋ผ ๊ธฐํ๊ฐ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ํฉ๋ฆฌ์ ์
๋๋ค. ndarray.__array_function__
๋ด๋ถ์ ๊ณต์ฉ ํจ์๊ฐ ์๋ ๊ตฌํ์ ํธ์ถํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. (๊ทธ๋ฆฌ๊ณ __array_ufunc__
์์ ๋น์ทํ ๊ฒ ...) __array_function__
์ ๋ํ ํ๊ฐํ์ # 12328์ ์ฐธ์กฐํ์ญ์์ค.@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
๊ฐ ์๋ชป๋ ์ธ์๋ฅผ ๋ฐ์ ๋์ง ๋ ์ด์ ๋ช
ํํ์ง ์์ต๋๋ค (ํ์ง๋ง ๋๊ธฐํ ์ํ๋ฅผ ์ ์งํ๋์ง ํ์ธํ๋ ํ
์คํธ๊ฐ ์์ต๋๋ค).ํ์ฌ ์ฝ๋๊ฐ ๊ณ์ ์๋ํ๋ ค๋ฉด ์ค์ ๊ธฐ๋ฅ์ด ๋์คํจ์ฒ ์ดํ์ ์์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ง์ต๋๋ค.ํ์ง๋ง ๋์คํจ์ฒ์ ๊ฐ์ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋์คํจ์ฒ ์ด๋ฆ์ ๋ฎ์ด ์๋๋ค.
np.arange ๋๋ np.empty์ ๊ฐ์ ํจ์์ ๋ํ ์ฌ์ฉ์ ์ง์ ๋ฐ์ก์ ์ ์ ํ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
ํ ๊ฐ์ง ์ต์ ์ NumPy๊ฐ ์ค์นผ๋ผ์ ๋ฐฐ์ด์ ๋์คํจ์นํ๋ ๊ฒ์ ๋๋ค. NEP์ ํธํ๋์ง ์์ต๋๊น? ์ด ๋ณํ๋ก ์ธํด ๊นจ์ง๋ ๊ฒ์ด ์์ต๋๊น?
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 ๋ง ์์ต๋๋ค.
๋ ์ค ํ๋๋ฅผ ํ๊ฒฌ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๊ธฐ์ ๋ค๋ฅด๊ฒ ์ ๋ฌํ๊ณ ์ํ๋ ์ฌ์ฉ์ ์ ์ ๋ชจ์ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค.
์ด ์์ ๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ง๋ง ๋ชจ์์ฒ๋ผ ๋์ํ์ง๋ง ์ ์๋ฅผ ๋ฐํํ์ง ์๊ณ ํํ์์ ๋ฐํํ๋ ๊ฒ์ผ๋ฅธ ๊ฐ์ฒด๊ฐ ์๋ค๋ ์๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
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
empty_like
shape
)๋ก ์ถฉ๋ถํ์ง ์์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๊น?
๋ด๊ฐ ์๊ฐํ ์์๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ np.random.RandomState
๋ฉ์๋์ ๋ํ size
์ธ์์ด์ง๋ง ํ์ฌ๋ ์ด๋ฌํ ๋ฉ์๋๋ฅผ ์ ํ ์ง์ํ์ง ์์ต๋๋ค. http://www.numpy.org/ ์ฐธ์กฐ neps / nep-0018-array-function-protocol.html # callable -objects-generated-at-runtime
๋ฐฐ์ด์ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ (์ : empty_like with shape)๊ฐ ์ถฉ๋ถํ์ง ์์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๊น?
NumPy์ ์์กดํ๋ ๊ธฐ์กด API๋ฅผ ์ฌ์ฉํ๊ณ ๊ธฐ์กด ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ค๋ฅธ ๋ฐฑ์๋์์ ํฌ๋ช ํ๊ฒ ์๋ํ๋๋กํ๋ ค๋ ๊ฒฝ์ฐ.
์๋ฅผ ๋ค์ด, ์ฆ์ ์คํ๋๋ ๋์ ํธ์ถ ๊ทธ๋ํ๋ฅผ ์์ฑํ๋ NP์ ๊ฐ์ ๋ฐฐ์ด๋ก scipy.optimize.differential_evolution
๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๋ฌ ๋ ์
๋ ฅ์ด ์ฌ๋ณผ๋ฆญ ์ธ ๊ฒฝ์ฐ ๊ธฐ๋ณธ numpy ๋ฐฐ์ด ๋์ ์ฌ๋ณผ๋ฆญ ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ ์ํด np.full
๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ฉด ๋์์ด ๋ ๊ฒ์
๋๋ค.
NumPy์ ์์กดํ๋ ๊ธฐ์กด API๋ฅผ ์ฌ์ฉํ๊ณ ๊ธฐ์กด ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ค๋ฅธ ๋ฐฑ์๋์์ ํฌ๋ช ํ๊ฒ ์๋ํ๋๋กํ๋ ค๋ ๊ฒฝ์ฐ.
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. np.array()
์ ๊ฐ์ ๋ช
์ ์ ๋ฐฐ์ด ๊ตฌ์ฑ์ ํ์คํ ๋ ํ์ดํ๊ณผ ํธํ๋๋๋ก ๋ค์ ์์ฑํด์ผํฉ๋๋ค.
์ด ๊ฒฝ์ฐ energies = np.full(num_members, np.inf)
๋ฅผ energies = np.full_like(population, np.inf, shape=num_members)
์ ํํ๋ ๊ฒ์ ์ฝ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ณ๊ฒฝ์ฒ๋ผ ๋ณด์
๋๋ค.
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. np.array ()์ ๊ฐ์ ๋ช ์ ์ ๋ฐฐ์ด ๊ตฌ์ฑ์ ํ์คํ ๋ ํ์ดํ๊ณผ ํธํ๋๋๋ก ๋ค์ ์์ฑํด์ผํฉ๋๋ค.
์ด๋ฐ ์ข
๋ฅ์ ๋ณ๊ฒฝ์ ๋ํ ์ ์์ด ์์ต๋๊น? ์๋๋ฉด np.array
ํ๊ฒฌ ์ง์์ด ์ ๋ง ํ๋ค์ด์ 100 % ์ง์์๋ฐ์ ์ ์๋ค๊ณ ๋ง์ํ์๋ ๊ฑด๊ฐ์?
์ด ๊ฒฝ์ฐ energies = np.full (num_members, np.inf)๋ฅผ energies = np.full_like (population, np.inf, shape = num_members)๋ก ์ ํํ๋ ๊ฒ์ ์ฝ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๋ณ๊ฒฝ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ช ํํ. ๊ทธ๋ฌ๋ ์์ค ์ฝ๋๋ฅผ ์ ์ดํ์ง ์๊ฑฐ๋ ๊ฐ๋ฅํ ํ ๋ง์ด ์๊ณ ์ฌ๋ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ์ฌ์ฉ์๋ฅผ ์ง์ํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฌ์ฉ์์๊ฒ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ ์ต์
๋ชจ๋ ํน์ ๊ฒฝ์ฐ์ ํ์ํ ์ ์์ง๋ง (์ : ์ฌ์ฉ์๊ฐ np.full
ํธ์ถํ๊ณ ํ์ฌ ๊ธฐํธํ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ํ์ฉ), ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด NEP-18์ ๋ชฉํ๋ ์ด๋ฌํ ์ต์
์ด ํ์ํ์๊ธฐ๋ฅผ ์ ํํ๋ ๊ฒ์
๋๋ค. ๋ ๋ง์ ๊ฒฝ์ฐ์ ์ฌ๋๋ค์ด ์๋ NumPy๋ฅผ ์ฌ์ฉํ๋๋กํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฑ๋ฅ / ๋ณต์ก์ฑ ํธ๋ ์ด๋ ์คํ๊ฐ ์์์ ์ดํดํ๊ณ ์ด๊ฒ์ด์ด๋ฅผ ๊ตฌํํ์ง ์๋ ์ข์ ์ด์ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ ์ฐ์ฑ์ ์ป๊ธฐ ์ํด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชจ์ํด์ผ ํ ์๋ ์์ต๋๋ค.
์ด๋ฐ ์ข ๋ฅ์ ๋ณ๊ฒฝ์ ๋ํ ์ ์์ด ์์ต๋๊น? ์๋๋ฉด
np.array
ํ๊ฒฌ ์ง์์ด ์ ๋ง ํ๋ค์ด์ 100 % ์ง์์๋ฐ์ ์ ์๋ค๊ณ ๋ง์ํ์๋ ๊ฑด๊ฐ์?
NEP 22 ์๋ ์ฌ๊ธฐ์์ ์ต์
์ ๋ํ ๋ช ๊ฐ์ง ๋
ผ์๊ฐ ์์ต๋๋ค. numpy.ndarray
๊ฐ์ฒด ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ๋ฐํํ๊ธฐ ์ํด np.asarray()
์ ์๋ฏธ๋ฅผ ์์ ํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.์ด๋ฅผ ์ํด ์ ํ๋กํ ์ฝ์ด ํ์ํฉ๋๋ค.
๋ฌธ์ ๋์ด๋ค np.asarray()
ํ์ฌ ์ฉ๋๊ฐ ์ ํํ ์ผ์น ํ ๊ฒ์ผ๋ก ์์ ํ ์์๋ NumPy์ ๋ฐฐ์ด ๊ฐ์ฒด์ ์บ์คํ
์ ๊ด์ฉ์ ๋ฐฉ๋ฒ์
๋๋ค 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์ ๋ํด๋ณด๊ณ ์ถ์ ์์ ์ฌํญ์ด ํ๋ ์์ต๋๋ค. ํนํ NEP-18์ด ํ์ ํด๋์ค ์์ฑ์์๊ฒ ์ ๊ณตํ๋ ๋ด์ฉ์ ๋ช ํํํ๊ธฐ ์ํด https://github.com/numpy/numpy/pull/13633
gh-13329๊ฐ ์์ ๋ ์ดํ๋ก ์ฌ์ฉ์ฑ ์์
์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ํ์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ 1.17์ด ์ถ์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์๋ค๊ณ ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ก ์ธํด ๋ฌธ์ ๊ฐ์ ๋ฐ arange
gh-12379๊ฐ ์ฌ์ ํ 1.17์ ํฌํจ๋ ์ ์์ต๋๋ค.
๋ํ # 13728- histogram[2d]d
์ ๋ํ ๋์คํจ์ฒ์ ๋ฒ๊ทธ
์ด๋ก ์ธํด ๋ฌธ์ ๊ฐ์ ๋ฐ ๋ฒ์ gh-12379๊ฐ ์ฌ์ ํ 1.17์ ํฌํจ๋ ์ ์์ต๋๋ค.
๋ฌธ์์ ๋ํ ๋ฌธ์ ๊ฐ ์์ด์ gh-13844๋ฅผ ์ด์์ต๋๋ค. ๋๋ ๋ฌธ์๊ฐ arange
๊ณต๊ฐ ๋ฌธ์ ๋ณด๋ค ํจ์ฌ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@shoyer ์ด๊ฑฐ ๋ซ์๋ ๋ ๊น์?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
NEP 22 ์๋ ์ฌ๊ธฐ์์ ์ต์ ์ ๋ํ ๋ช ๊ฐ์ง ๋ ผ์๊ฐ ์์ต๋๋ค.
numpy.ndarray
๊ฐ์ฒด ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ๋ฐํํ๊ธฐ ์ํดnp.asarray()
์ ์๋ฏธ๋ฅผ ์์ ํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.์ด๋ฅผ ์ํด ์ ํ๋กํ ์ฝ์ด ํ์ํฉ๋๋ค.๋ฌธ์ ๋์ด๋ค
np.asarray()
ํ์ฌ ์ฉ๋๊ฐ ์ ํํ ์ผ์น ํ ๊ฒ์ผ๋ก ์์ ํ ์์๋ NumPy์ ๋ฐฐ์ด ๊ฐ์ฒด์ ์บ์คํ ์ ๊ด์ฉ์ ๋ฐฉ๋ฒ์ ๋๋คnumpy.ndarray
์๋๋ก ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ผ๋ก, ์๋ฅผ ๋ค์ด,.์ด๊ฒ์ด ์ฌ์ค์ด ์๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ง๋ง์ด ๋์์ ์ ํํ๋ฉด ๋ง์ ๋ค์ด ์คํธ๋ฆผ ์ฝ๋๊ฐ ์์๋๋ฏ๋ก ์์ํ์ง ์์ต๋๋ค. ๋ค์ด ์คํธ๋ฆผ ํ๋ก์ ํธ๋ ์ต์ํ ๋ฐฐ์ด ๋ ํ์ดํ์ ์ด๋ฌํ ์ธก๋ฉด์ ์ ํํด์ผํฉ๋๋ค.
์. NEP 18์ ๋๋กญ ์ธ NumPy ๋์์์ํ ์์ ํ ์๋ฃจ์ ์ด ์๋๋ผ ๊ทธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ๋จ๊ณ์ ๋๋ค.