.__skip_array_function__
é¢æ°å±æ§ãè¿œå ããŠã __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ã®æºåãæŽããŸãã ç©äºãä»äžããã®ã¯ããªãç°¡åã§ã-ããã¯ãŸãšããã®ã«1æéãããããŸããã§ããã
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-ããã€ãã®å®è£ ãèŠãŠãç§ã¯2ã€ã®å¿é ããããŸãïŒ
reshape
ãªã©ã®äžéšã®é¢æ°ã§ã¯ãå
ã®é¢æ°ã¯ã reshape
ã¡ãœãããå®çŸ©ããããšã«ãããããããªãŒããŒã©ã€ãããæ¹æ³ããã§ã«æäŸããŠããŸãã __array_function__
ãå®çŸ©ãããã¹ãŠã®ã¯ã©ã¹ã«ã€ããŠããããäºå®äžéæšå¥šã«ããŠããŸããnp.median
ãªã©ã®ä»ã®é¢æ°ã®å Žåã np.asanyarray
ãšufuncsã泚ææ·±ã䜿çšããããšã§ããµãã¯ã©ã¹ããã§ã«ãããã䜿çšã§ããããã«ãªããŸããã ãã ãããã®æ©èœã«çŽæ¥ã¢ã¯ã»ã¹ããããšã¯ã§ããªããªããŸãããã€ã³ã¿ãŒãã§ãŒã¹ãç°¡çŽ åããçŽç²ãªndarray
æé©åãããå®è£
ãäœæã§ãããããå
šäœãšããŠããã2ã€ã®ããšã¯ããããå©ç¹ã ãšæããŸããåŸè
ã¯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 ïŒãã£ã¹ãããã£å®çŸ©ã1è¡ã«åãŸãå Žåã¯ã 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ãå®å
šã«ãªãŒããŒããŒãå¯èœã«ããããã«å¿
èŠãªæåŸã®ããšã ãšæããŸãã NumPy1.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
ãªãŒããŒã©ã€ããè¿œå ãããšãããã€ãã®ãã³ããã¹ãã倱æããŸããïŒhttps://github.com/pandas-dev/pandas/issues/23172ïŒã äœãèµ·ãã£ãŠããã®ãã¯ãŸã ããããããŸãããããªãªãŒã¹ããåã«ç¢ºå®ã«ææ¡ããå¿
èŠããããŸãã
ãããdask / pandasã§ãã¹ãã®å€±æãåŒãèµ·ãããŠããçç±ã«ã€ããŠã®ç§ã®æåã®æšæž¬ã«ã€ããŠã¯ã httpsïŒ//github.com/numpy/numpy/issues/12225ãåç §ããŠ
ã€ã³ããŒãæéã®ããã€ãã®ãã³ãããŒã¯ïŒãœãªããã¹ããŒããã©ã€ããæèŒããç§ã®macbook proã§ïŒïŒ
decorator.decorate
ïŒïŒ12226ïŒã®äœ¿çšïŒ183.694ããªç§ç§ã®ãã³ãããŒã¯ã¹ã¯ãªãã
import numpy as np
import subprocess
times = []
for _ in range(100):
result = subprocess.run("python -X importtime -c 'import numpy'",
shell=True, capture_output=True)
last_line = result.stderr.rstrip().split(b'\n')[-1]
time = float(last_line.decode('ascii')[-15:-7].strip().rstrip())
times.append(time)
print(np.median(times) / 1e3)
ã¡ã¢ãªäœ¿çšéïŒå/åŸïŒã«ã€ããŠäœãèãã¯ãããŸããïŒ ããã¯ãç¹ã«IoTã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠã䟿å©ã§ãã
ã¢ãžã¥ãŒã«ã®ã¡ã¢ãªäœ¿çšéã確å®ã«æž¬å®ããæ¹æ³ãç¥ã£ãŠããŸããïŒ
6:56 Hameerã¢ãããŒã¹ã£ãŒã®åæã2018幎10æ20æ¥ã«ã¯[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
ãå«ãã¹ã¯ãªãããäœæããã¹ãªãŒãã¹ããŒãã¡ã³ããè¿œå ããããã»ã¹ã¡ã¢ãªã远跡ããã ãã§ååã ãšæããŸãã 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ã§ç°¡åã«èª¿ã¹ãããšæã£ãŠããŸãïŒå®éã«ã¯ã2ã€ã®é¢æ°ããå«ãŸããŠããŸããïŒïŒ 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ãå®è£
ããå¿
èŠããããŸããããã®éã«ã1ã€ã ãã®äžè¬çãªã±ãŒã¹ã§æéãåãããã€ãã®å°ããªå€æŽãå ããŠPRãè¡ããŸããã¿ã€ããããã³ã¿ã€ããndarray
ã®ã¿ã®å Žåã ïŒ12321ãåç
§ããŠãã ããã
@ shoyer-ç§ã¯ã¡ãŒãªã³ã°ãªã¹ãã§2ã€ã®åé¡ãæèµ·ããŸããããããããããã§ãè¿°ã¹ãŠãããšããã§ãããã
types
å«ããå¿
èŠããããŸããïŒ ïŒãªãŒããŒã©ã€ããæäŸããåŒæ°ã ãã§ãªããïŒå®è£
ã«ã€ããŠç¥ã£ãŠãããšåœ¹ç«ã€ããã«æãããŸãã ïŒïŒ12327ãåç
§ïŒã__array_function__
ããªãŒããŒã©ã€ãããå Žåã§ãã ndarray.__array_function__
å®è£
ã¯ãµãã¯ã©ã¹ãåãå
¥ããå¿
èŠããããŸããïŒ ããã¯ããªã¹ã³ãã®çœ®æååãšããµãã¯ã©ã¹ããã§ã«ä¿éãããæ©äŒããã£ãããšãèãããšãåççã§ãã ããã¯ã 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çªç®ã®ãªãã·ã§ã³ãè¿œå ããŸãã
ãªãã·ã§ã³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ãªã©ã®é¢æ°ã®ã«ã¹ã¿ã ãã£ã¹ããããå®çŸ©ã§ãããšäŸ¿å©ã§ãã
1ã€ã®ãªãã·ã§ã³ã¯ã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
ïŒã ãã§ã¯äžååãªãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
ç§ãèããããšãã§ããä»ã®ã±ãŒã¹ã¯ã size
np.random.RandomState
ã¡ãœããã«å¯Ÿããsize
åŒæ°ã§ãããçŸåšããããããŸã£ãããµããŒãããŠããªãããšã«æ³šæããŠãã ãã-httpïŒ//www.numpy.org/ãåç
§ããŠ
é åããã³ãã¬ãŒããšããŠäœ¿çšããïŒshapeã®empty_likeãªã©ïŒã ãã§ã¯äžååãªãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
NumPyã«äŸåããæ¢åã®APIã䜿çšããŠããŠãæ¢åã®ãœãŒã¹ã³ãŒããå€æŽããã«ãå¥ã®ããã¯ãšã³ãã§ééçã«æ©èœããããå Žåã
ããšãã°ãé
åã®ãããªNPã䜿çšããŠscipy.optimize.differential_evolution
ãåŒã³åºãããšãããšããŸããããã«ãããããã«å®è¡ããã®ã§ã¯ãªããã³ãŒã«ã°ã©ããäœæãããŸãã
ããªãã¯èŠãããšãã§ããããã§ãæã
ã¯å€æŽããããšãã§ããã°ãããã¯åèã«ãªãnp.full
ããã«æž¡ãããå
¥åã«ã象城çã ã£ãå Žåã代ããã«ããã©ã«ãã®numpyã®é
åã®ã·ã³ããªãã¯ãªé
åãäœæããŸãã
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ã«ã¯ãããã§ã®ãªãã·ã§ã³ã«é¢ããããã€ãã®èª¬æããããŸãã np.asarray()
ã®ã»ãã³ãã£ã¯ã¹ãå®å
šã«å€æŽããŠã numpy.ndarray
ãªããžã§ã¯ã以å€ã®ãã®ãè¿ãããšã¯ã§ããªããšæããŸããããã«ã¯ãæ°ãããããã³ã«ãå¿
èŠã«ãªããŸãã
åé¡ã¯ã np.asarray()
ãçŸåšãnumpyé
åãªããžã§ã¯ãã«ãã£ã¹ãããæ
£çšçãªæ¹æ³ã§ãããšããããšã§ããããã¯ãããšãã°ã¡ã¢ãªã¬ã€ã¢ãŠãã«è³ããŸã§ã numpy.ndarray
ãšå®å
šã«äžèŽããããšãã§ããŸãã
ãããåœãŠã¯ãŸããªããŠãŒã¹ã±ãŒã¹ã¯ç¢ºãã«ãããããããŸããããã®åäœãåãæ¿ãããšå€ãã®ããŠã³ã¹ããªãŒã ã³ãŒããç Žæãããããåå¿è ã§ã¯ãããŸããã ããŠã³ã¹ããªãŒã ãããžã§ã¯ãã§ã¯ãå°ãªããšãé åããã¯ã¿ã€ãã³ã°ã®ãã®åŽé¢ã«ãªããã€ã³ããå¿ èŠããããŸãã
ããã«ã¯ããã©ãŒãã³ã¹ãšè€éãã®ãã¬ãŒããªããããããšãç解ããŠããŸããããã¯ãããããå®è£ ããªãçç±ã«ãªãå¯èœæ§ããããŸãã ããããããã¯ãŠãŒã¶ãŒã«åœŒããæãæè»æ§ãåŸãããã«ä»ã®æ段ãæ¢æ±ããããšã匷ãããããããŸããã
ã¯ãã NEP 18ã¯ãããããã€ã³NumPyã®ä»£æ¿æ¡ã®å®å šãªãœãªã¥ãŒã·ã§ã³ãšãªãããšãæå³ãããã®ã§ã¯ãããŸãããããã®æ¹åãžã®äžæ©ã§ãã
__numpy_implementation__
å±æ§ãè¿œå ããããã®NEP-18ã®æ¹èšçãäœæããŸããã
https://github.com/numpy/numpy/pull/13305
numpy.testing
ã®é¢æ°ãã¯ãŒãããã®ãå¿ããŠããããšã«æ°ã¥ããŸããïŒ https ïŒ
ç§ã¯ããã«ãããããã€ããã§ã...
ç¹ã«NEP-18ããµãã¯ã©ã¹ã®äœæè ã«æäŸããä¿èšŒãæ確ã«ããããã«NEPã«ç¢ºèªãããæ¹èšã1ã€ãããŸãïŒ https ïŒ
gh-13329ãä¿®æ£ãããŠããããŠãŒã¶ããªãã£ã¿ã¹ã¯ãå®äºãšããŠããŒã¯ããŸããã 決å®ããŸãã-ïŒ13588ã¯1.17ã®ãªãªãŒã¹åŸãŸã§åŸ
ã€ããšãã§ããŸãã ããã«ãããããã¥ã¡ã³ããæ¹åããã arange
gh-12379ã¯1.17ã«å«ããããšãã§ããŸãã
ïŒ13728ããããŸã- histogram[2d]d
ãã£ã¹ãããã£ã®ãã°
ãã®ãããããã¥ã¡ã³ããæ¹åãããgh-12379ã®ç¯å²ã¯1.17ã«å«ããããšãã§ããŸãã
ããã¥ã¡ã³ãã®åé¡ãæ¬ èœããŠããã®ã§ãgh-13844ãéããŸããã ããã¥ã¡ã³ãã¯arange
æªè§£æ±ºã®åé¡ãããã¯ããã«éèŠã ãšæããŸãã
@shoyerãããéããããšãã§ããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
NEP 22ã«ã¯ãããã§ã®ãªãã·ã§ã³ã«é¢ããããã€ãã®èª¬æããããŸãã
np.asarray()
ã®ã»ãã³ãã£ã¯ã¹ãå®å šã«å€æŽããŠãnumpy.ndarray
ãªããžã§ã¯ã以å€ã®ãã®ãè¿ãããšã¯ã§ããªããšæããŸããããã«ã¯ãæ°ãããããã³ã«ãå¿ èŠã«ãªããŸããåé¡ã¯ã
np.asarray()
ãçŸåšãnumpyé åãªããžã§ã¯ãã«ãã£ã¹ãããæ £çšçãªæ¹æ³ã§ãããšããããšã§ããããã¯ãããšãã°ã¡ã¢ãªã¬ã€ã¢ãŠãã«è³ããŸã§ãnumpy.ndarray
ãšå®å šã«äžèŽããããšãã§ããŸãããããåœãŠã¯ãŸããªããŠãŒã¹ã±ãŒã¹ã¯ç¢ºãã«ãããããããŸããããã®åäœãåãæ¿ãããšå€ãã®ããŠã³ã¹ããªãŒã ã³ãŒããç Žæãããããåå¿è ã§ã¯ãããŸããã ããŠã³ã¹ããªãŒã ãããžã§ã¯ãã§ã¯ãå°ãªããšãé åããã¯ã¿ã€ãã³ã°ã®ãã®åŽé¢ã«ãªããã€ã³ããå¿ èŠããããŸãã
ã¯ãã NEP 18ã¯ãããããã€ã³NumPyã®ä»£æ¿æ¡ã®å®å šãªãœãªã¥ãŒã·ã§ã³ãšãªãããšãæå³ãããã®ã§ã¯ãããŸãããããã®æ¹åãžã®äžæ©ã§ãã