ç¹å®ã®numpy.ndarrayã¯ã©ã¹ã®åãã³ããå®è£ ãã人ã¯ããŸããïŒ
ä»ã¯ã¿ã€ãã³ã°ã䜿ã£ãŠããŸããã©ãã§ãããã£ãšå ·äœçãªãã®ãããã°ããã®ã«ãšæããŸãã
ããšãã°ãnumpyã®äººã ãarray_likeãªããžã§ã¯ãã¯ã©ã¹ã®åãšã€ãªã¢ã¹ãè¿œå ããå Žåã§ãã ããã«è¯ãããšã«ãdtypeã¬ãã«ã§ãµããŒããå®è£ ããŠãufuncã ãã§ãªãä»ã®ãªããžã§ã¯ãããµããŒããããããã«ããŸãã
ç§ã¯èª°ãããã«ã€ããŠèããŠããªããšæããŸãã ãã¶ãããªãã¯ãããã§ããïŒ :-)
ãŸããããã«ã€ããŠãã©ããŒã¢ãããããå Žåã¯ããªãŒãã³ãšã³ãã®èšèšãã£ã¹ã«ãã·ã§ã³ã«é©ããŠãããããghã®åé¡ãéããŠããã£ã¹ã«ãã·ã§ã³ãã¡ãŒãªã³ã°ãªã¹ãã«ç§»åããããšããå§ãããŸãã
SOã§ãã®åçãåŸãåŸãåé¡ã解決ããããšã«ããŸããã
æ確ã«ããããã«ãç§ãã¡ã¯å®éã«ã¯ãã¯ãŒã«ãªæ°ããPythonæ©èœãäœãïŒããããã®éïŒããµããŒãããããšã«ç°è°ã¯ãããŸããã ç§ãã¡ãå€ãã®ãªãœãŒã¹ãæããªããã©ã³ãã£ã¢ãéå¶ãããããžã§ã¯ãã§ãããšããã ããªã®ã§ãèå³ã®ãã人ããããå®è¡ããããã«ã¹ãããã¢ããããå Žåã«ã®ã¿ãäœããèµ·ãããŸãã
ã¡ãŒãªã³ã°ãªã¹ãã¯éåžžââãäœãã«åãçµã¿å§ããããšããŠããå ŽåããŸãã¯ä»ã®é¢å¿ã®ãã人ã ãå©ããŠããã人ãåéãããå Žåã«æé©ãªå Žæã§ãã
ããããšãã@ njsmithã æ§é åãããŠããªãã¡ãŒãªã³ã°ãªã¹ããšã¯å¯Ÿç §çã«ãããæŽç¶ãšããåé¡è¿œè·¡ã®ããã«ããããå§ããããšã«ããŸããïŒä»ã®æ©èœã®äžã§ãç¹ã«ãæ©èœãªã¯ãšã¹ããã¿ã°ãæ¢ããŠããŸãã...ïŒ
SOã§ç§ã«çãã人ãå®è¡å¯èœãªè§£æ±ºçã§ç§ã«æ»ã£ãŠããã®ã§ãç§ã¯åé¡ãæ®ãããšã«ããŸããã
ãã¶ããNumpyã®ããã¥ã¡ã³ããæŽæ°ããŠã圌ã®çããå«ããå¿
èŠããããŸãïŒããããå Žåã¯ãå¿
ã圌ã«ã¯ã¬ãžãããäžããŠãã ããïŒã
å床ãæè¬ããŸãïŒ
ããã«ã¡ã¯ã¿ããªïŒ ãã®åé¡ã«ã€ããŠäœãé²å±ããã£ããã©ãããç§ã¯èŠªåã«æã£ãŠããŸããã ããããšãã
ãã¡ãã®ã¡ãŒãªã³ã°ãªã¹ãã§ããã«ã€ããŠã®è°è«ããã
ããã«è°è«ãããæ¹ã®ããã«ããã®å·ãåéããŸãã
ããã¯NumPyã«ãšã£ãŠç¢ºãã«æãŸããããšã ãšæããŸãããNumPyãçŸåšnp.array
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ä»»æã®ãªããžã§ã¯ããåãå
¥ããæ¹æ³ãªã©ãå
¥åããŠäžŠã¹æ¿ããããã®NumPy APIã«ã¯ç¢ºãã«ããã€ãã®ããªãããŒãªåŽé¢ããããŸãïŒãã ãããããã¯ãªãŒã³ã¢ããããŸããhttpsïŒ//github.com/numpy/numpy/issues/5353ãåç
§ããŠãã ããïŒã
ããã€ãã®è¯ãä»äºãããã§è¡ãããŠããŸãïŒ https ïŒ
äœæ¥ãäžæµã®numpyãŸãã¯typeshedã®ã©ã¡ãã«ããã·ã¥ãããã«ã€ããŠã®è°è«ããããŸãïŒ //github.com/machinalis/mypy-data/issues/16
CC @mrocklin
ããã¯æ¬åœã«NumPyãžã®çŽ æŽãããè¿œå ã«ãªãã§ãããã ãããtypeshedãŸãã¯NumPyã«ããã·ã¥ããããã®æ¬¡ã®ã¹ãããã¯äœã§ããããïŒ äžå®å šãªã¹ã¿ãã§ã圹ã«ç«ã¡ãŸããå°ãã®æ瀺ãåãã§ãæäŒãããŸããïŒ
@henryJackéå§ããã®ã«æé©ãªå Žæã¯ãããããããŒã«ã§ããmypyãšé£æºãã段éçãªè¿œå ããµããŒãããæ¹æ³ã§ãåºæ¬çãªåã¢ãããŒã·ã§ã³ãNumPyãªããžããªã«çµ±åããïŒçæ³çã«ã¯ãã¹ãããïŒæ¹æ³ãèŠã€ããŸãã
次ã«ãéåžžã«æå°éã®æ³šéããå§ããŠãããããé²ãããšãã§ããŸãã ç¹ã«ãdtypeã¢ãããŒã·ã§ã³ãæå®ããé©åãªæ¹æ³ããªããããä»ã®ãšããã¹ãããããŸãïŒã€ãŸãã ndarray
ã§ã¯ãªãndarray[int]
ndarray
ã®ã¿ãå®è¡ããŸãïŒã
ããã圹ã«ç«ã£ãããGoogleã§äœ¿çšããããã«äœæããããªãŒãã³ãœãŒã¹ã®æ³šéã®ä»£æ¿ããŒãžã§ã³ããããŸãã ãã ããç¬èªã®ãã«ãã·ã¹ãã ãããã pytypeã䜿çšããŠåãã§ãã¯ãè¡ããããã¢ããã¹ããªãŒã ã«ç§»æ€ããéã«çãçããå¯èœæ§ããããŸãã
ãµã³ãã«ã³ãŒãã¹ããããã§mypyãå®éã«å®è¡ããŠåºåã確èªããããã«ãã¢ãããŒã·ã§ã³ããã¹ãããå¯äžã®æ¹æ³ã ãšæããŸããïŒ
ã¢ãããŒã·ã§ã³ãã³ãŒããšçµ±åããããåå¥ã®ã¹ã¿ããšããŠçµ±åããæ¹ãããã§ããããïŒ
ããããããã¯ã¹ãšãã³ããããã³ãŒãããŒã¹ãšã³ã¢ããŒã¿æ§é ã®èããå§ããå¿ èŠãããããšãåŠã¶å¿ èŠããããšæããŸããïŒ
@shoyer figure out how we can integrate basic type annotations
https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyiãnumpyã¢ãžã¥ãŒã«ã®ããŒã¹ãã£ã¬ã¯ããªã«çœ®ãã ãã§ã¯ãããŸãããããçš®ã®å®éšããŒãžã§ã³ã§ã¯ããŸãã«ãããè¡ããŸããå°ãªããšã
ã¢ãããŒã·ã§ã³ãã³ãŒããšçµ±åããããåå¥ã®ã¹ã¿ããšããŠçµ±åããæ¹ãããã§ããããïŒ
ã³ãŒããšçµ±åããã®ã¯çŽ æŽãããããšã§ãããNumPyã§ã¯ãŸã å®çŸå¯èœã§ã¯ãªããšæããŸãã åã¢ãããŒã·ã§ã³ã®ã³ã¡ã³ãæååããŒãžã§ã³ã䜿çšããŠããPython 2ã§ã¯typing
ããã€ã³ããŒãããå¿
èŠããããNumPyãžã®äŸåé¢ä¿ã®è¿œå ã¯ã»ãšãã©ããŒãã«ããå€ããŠããŸãã
ãŸããã³ã¢ããŒã¿æ§é ãšé¢æ°ã®ã»ãšãã©ïŒ ndarray
ãarray
ïŒã¯æ¡åŒµã¢ãžã¥ãŒã«ã§å®çŸ©ãããŠããããããšã«ããããã§ã¹ã¿ãã䜿çšããå¿
èŠããããŸãã
https://github.com/machinalis/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyiãnumpyã¢ãžã¥ãŒã«ã®ããŒã¹ãã£ã¬ã¯ããªã«çœ®ãã ãã§ã¯ãããŸãããããçš®ã®å®éšããŒãžã§ã³ã§ã¯ããŸãã«ãããè¡ããŸããå°ãªããšã
ã¯ããå€éšã³ãŒãã«ã¯ããã§ååã ãšæããŸãã ããããmypyã¯äžå®å šãªåã¢ãããŒã·ã§ã³ãæã€ã©ã€ãã©ãªãã©ã®ããã«åŠçããŸããïŒ
å¯èœã§ããã°ããããã¬ãã«ã ãã§ãªãã numpy.core.multiarray
çŽæ¥æ³šéãä»ããããšãã§ããŸãã ïŒ multiarray
ã¯ã ndarray
ãããªNumPyã®ã³ã¢åãå®çŸ©ãããŠããæ¡åŒµã¢ãžã¥ãŒã«ã§ããïŒããã«ãããNumPyèªäœãçŽç²ãªPythonã¢ãžã¥ãŒã«ã®äžéšã®åãã§ãã¯ãå©çšã§ããããã«ãªããšæããŸãã
ç§ã¯èå³ããããŸãã np.empty(shape=(5, 5), dtype='float32')
ã®ã¿ã€ãã¯äœã§ããïŒ
np.linalg.svd
ã®çš®é¡ã¯äœã§ããïŒ
ã¿ã€ãããã©ã¡ãŒã¿åãããŠããããã«èŠããŸãããããã¯dtypeãšåãã§ããïŒ ãããã®å¯žæ³ãŸãã¯åœ¢ç¶ã§ãã©ã¡ãŒã¿åããããšãå¯èœã§ããïŒ Pythonã®ã¿ã€ãã³ã°ã¢ãžã¥ãŒã«ã¯ã©ã®ãããæŽç·ŽãããŠããŸããïŒ
ããããããã¯ãããã®dtypeã«ãã£ãŠãã©ã¡ãŒã¿åãããŠããŸãã ç§ã¯ã¿ã€ãã³ã°ã¢ãžã¥ãŒã«ã«ã¯å°é家ã ããç§ã¯ããªãã ãç¶æ¿ndarrayã¿ã€ããæã£ãŠãããšæãGeneric[dtype, int]
ã§ãã©ã¡ãŒã¿åããããã«ndim
ã ããããžã¥ãªã¢ãããŠããããšã ãšæããŸãã 圢ç¶ãç°¡åã«ãã©ã¡ãŒã¿åã§ãããã©ããã¯ããããŸããã ãŸããã©ã®ãããªã¡ãªãããããããããã®ãããããããªããã®ããã«è¡ãããªãã£ãã®ãã«ã€ããŠãããããŸããã
dtypeãã©ã¡ãŒã¿ã§numpydtypesã䜿çšã§ããŸããããããšãå
¥åã®ã¿ãå¯èœã§ããïŒ
ã¢ãžã¥ãŒã«ã¿ã€ãïŒ
ãŸããnumpy.emptyãAnyåã®é
åãè¿ãã®ãå¥åŠã§ãã çããã
dtype =ããŒã¯ãŒãå€ããåãååŸããã®ã¯é£ããã§ããïŒ
2017幎9æ1æ¥ååŸ6æ42åããJacquesKvamã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ããããããã¯ãããã®dtypeã«ãã£ãŠãã©ã¡ãŒã¿åãããŠããŸãã ç§ã¯ã¿ã€ãã³ã°ã®å°é家ã§ã¯ãããŸãã
ã¢ãžã¥ãŒã«ã§ãããndarrayåã«Generic [dtypeã
int] ndimã§ãã©ã¡ãŒã¿åããŸãã ããããžã¥ãªã¢ãããŠããããšã ãšæããŸãã ç§ã¯éããŸã
圢ç¶ãç°¡åã«ãã©ã¡ãŒã¿åã§ãããã©ããã確èªããŠãã ããã ãŸããç§ã¯äœã確信ããŠããŸãã
ããããããããããããã¡ãªãããããªããããè¡ãããªãã£ãã®ããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/numpy/numpy/issues/7370#issuecomment-326698639 ããŸãã¯ãã¥ãŒã
ã¹ã¬ãã
https://github.com/notifications/unsubscribe-auth/AASszMlYO7iHdoPE_GU--njIYICSVVZ0ks5seIhFgaJpZM4Hm_CR
ã
numpy dtypeã䜿çšã§ããŸãããå®çŸ©ããå¿
èŠããããŸãã ããã¯ãnp.stdã䜿çšããfloating
ã§ããã§è¡ãããŸããã
ããããããŸããããããã¯äžå¯èœã ãšæããŸãã åŒæ°ã®å€ã«åºã¥ããŠåºåã¿ã€ããå€æŽããããšã¯ã§ããªããšæããŸãã ç§ãã¡ãã§ããæåã®ããšã¯ãç§ãã¡ãæ°ã«ãããã¹ãŠã®åã®ç¹æ®åã§é¢æ°ããªãŒããŒããŒãããããšã ãšæããŸãã
https://docs.python.org/3/library/typing.html#typing.overload
ãã1ã€ã®ãªãã·ã§ã³ã¯ãå³å¯ã«åæå®ããããšã€ãªã¢ã¹ãå°å
¥ããããšã§ãããããã£ãŠã np.empty[dtype]
ã¯ãã·ã°ããã£(ShapeType) -> ndarray[dtype]
æã€é¢æ°ã§ãã
çããnp.cast[dtype](x)
é¢æ°ã§ããã«ã¯ãã§ã«ããã€ãã®åäŸããããŸã
@jwkvam OKãããã§å€ådtype
ã¢ãããŒã·ã§ã³ãå®è¡å¯èœã§ã-ç§ã¯åçŽã«å§ããŠããããè¡ãããšãææ¡ããŠããŸããã
ç§ãèããTypeVar
å€åããããã代ããã«éè² è·ã䜿çšããããšãã§ããŸãïŒ
D = TypeVar('D', np.float64, np.complex128, np.int64, ...) # every numpy generic type
def empty(dtype: Type[D]) -> ndarray[Type[D]]: ...
ç§ããããæ£ããç解ããŠããã°ãããã¯empty(np.float64)
-> ndarray[np.float64]
ãæå³ããŸãã
ãã§ãã¯ã®åœ¢ç¶ãšæ¬¡å
ã®æ
å ±ãå
¥åã§ããã®ãçŽ æŽãããããšã§ãããçŸåšã®ã¿ã€ããã§ãã«ãŒã¯ãã®ä»»åãæãããªããšæããŸãã ããšãã°ã Generic[int]
ã¯ãšã©ãŒã§ãã Generic
ãžã®åŒæ°ã¯TypeVar
ã€ã³ã¹ã¿ã³ã¹ã§ããå¿
èŠããããŸãã
https://github.com/python/cpython/blob/868710158910fa38e285ce0e6d50026e1d0b2a8c/Lib/typing.py#L1131 -L1133
ãŸãããã£ã¡ã³ã·ã§ã³ãå«ã眲åãè¡šçŸããå¿
èŠããããŸãã ããšãã°ã np.expand_dims
ã¯ndim
-> ndim+1
ãããããŸãã
ããŸããã1ã€ã®ã¢ãããŒãã¯ãè² ã§ãªãæŽæ°ããšã«ã¯ã©ã¹ãå®çŸ©ããããšã ãšæããŸããããšãã°ã Zero
ã One
ã Two
ã Three
ã.. ã次ã«ãããããã®ãªãŒããŒããŒããå®çŸ©ããŸãã ããã¯ããã«ç²ããŸãã
TensorFlowã§ã¯ã tf.Dimension()
ãštf.TensorShape()
ã圢ç¶ãéçã«è¡šçŸã§ããŸãã ããããããã¯åã·ã¹ãã ã§è¡ãããããšã§ã¯ãããŸããã ããããåé¢æ°ã«ã¯ãå
¥åã®åœ¢ç¶ãšãã³ãœã«ä»¥å€ã®åŒæ°ããåºåã®éçãªåœ¢ç¶ã決å®ãããã«ããŒãé¢é£ä»ããããŠããŸãã NumPyã§ãããå®è¡ãããå Žåã¯ãåæ§ã®äœããå¿
èŠã«ãªããšæããŸãããPythonã®ã¿ã€ãã³ã°ã·ã¹ãã ã«ã¯ããã®çš®ã®æè»æ§ã瀺åãããã®ã¯ãããŸããã
@shoyerãªãã»ã©ãæ®å¿µã§ãã ç§ã¯ä»¥äžãããã¯ããããšãã§ããŸãã
_A = TypeVar('_A')
_B = TypeVar('_B', int, np.int64, np.int32)
class Abs(Generic[_A, _B]):
pass
class Conc(Abs[_A, int]):
pass
ãããããããã©ãããªãŒãããŠãããšã¯æããŸãã...
ããªãã®äŸã¯ããŸãããããã§ãïŒ ã¿ã€ãã®å¶çŽããªããŠãããŸãæ©èœããããã«èŠããŸããã str
ãããªdtypeããã¹ãã§ããŸãã ããã©ã«ãã®åŒæ°ãåé€ããå¿
èŠãããããããæ©èœãããæ¹æ³ãããããŸããã§ããã
D = TypeVar('D')
def empty(shape: ShapeType, dtype: Type[D], order: str='C') -> ndarray[D]: ...
ãšã³ãŒã
def hello() -> np.ndarray[int]:
return np.empty(5, dtype=float)
ç§ã¯åŸã
error: Argument 2 to "empty" has incompatible type Type[float]; expected Type[int]
ã¿ã€ãã亀æãããšãå°ãæ··ä¹±ããŸãã
def hello() -> np.ndarray[float]:
return np.empty(5, dtype=int)
ãšã©ãŒã¯çºçããŸããã å ±å€ãšããŠããŒã¯ãããŠãããã®ã¯ãªããšæããŸããã
åã·ã¹ãã ã¯ç§ãã¡ãæãã»ã©æŽç·ŽãããŠããŸãããã ããã§ã䟡å€ããããšæããŸããïŒ ç§ãæè¬ãã1ã€ã®å©ç¹ã¯ãjediãä»ããããè¯ãã³ãŒãè£å®ã§ãã
ã¿ã€ãã亀æãããšãå°ãæ··ä¹±ããŸãã
ããã§ã®åé¡ã¯ã int
ã€ã³ã¹ã¿ã³ã¹ãfloat
ã¢ãããŒã·ã§ã³ã«å¯ŸããŠæé»çã«æå¹ã§ãããšèŠãªãããããšã ãšæããŸãã å
¥åPEPã®æ°å€ã¿ã¯ãŒã«é¢ãã泚èšãåç
§ããŠãã ããã
https://www.python.org/dev/peps/pep-0484/#the -numeric-tower
ã¢ãããŒã·ã§ã³ã«æ±çšPythonã¿ã€ãã§ã¯ãªãNumPyã¹ã«ã©ãŒã¿ã€ããèŠæ±ããã°ããããåé¿ã§ãããšæããŸããããšãã°ã np.ndarray[np.integer]
ã§ã¯ãªãnp.ndarray[int]
ã§ãã
TypeVar
ã«ã¯bound
åŒæ°ãããã®ã§ãããã¯å®éã«ã¯ç§ãæã£ãŠãããããå°ãç°¡åã§ãã ã ããç§ã®äŸãä¿®æ£ããïŒ
D = TypeVar('D', bound=np.generic)
def empty(dtype: Type[D]) -> ndarray[D]: ...
ããã©ã«ãã®åŒæ°ãåé€ããå¿ èŠãããããããæ©èœãããæ¹æ³ãããããŸããã§ããã
ããã§äœãåŸãŠããã®ãããããããŸãããïŒ
dtypeã®ããã©ã«ãå€ãã¹ã¿ãã«ãšã³ã³ãŒãããããšããŸããã 圌ãã¯mypy-dataãªããžããªã§ãããè¡ããŸããã
def empty(shape: ShapeType, dtype: DtypeType=float, order: str='C') -> ndarray[Any]: ...
https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyi#L523ãã
ããªãã®äŸã«åŸã£ãŠãmypyãdtypeã®ããã©ã«ãåŒæ°ã§åäœãããããšãã§ããŸããã§ããã dtype: Type[D]=float
ãšdtype: Type[D]=Type[float]
ãè©ŠããŸããã
dtype
ããžã§ããªãã¯åã«ãªãå¿
èŠããããšæããŸãã次ã«ãããã©ã«ãå€ãfloat
ã§ã¯ãªãnp.float64
ãããªnumpyãžã§ããªãã¯ãµãã¯ã©ã¹ã«èšå®ããå¿
èŠããããŸãã
# totally untested!
D = TypeVar('D', bound=np.generic)
class dtype(Generic[D]):
<strong i="9">@property</strong>
def type(self) -> Type[D]: ...
class ndarray(Generic[D]):
<strong i="10">@property</strong>
def dtype(self) -> dtype[D]: ...
DtypeLike = Union[dtype[D], D] # both are coercible to a dtype
ShapeLike = Tuple[int, ...]
def empty(shape: ShapeLike, dtype: DtypeLike[D] = np.float64) -> ndarray[D]: ...
ããã§ã¯ãããŸããã D == type(dtype.type) == type
ã§ããããã䜿çšããããã©ã¡ãŒã¿ãŒã¯D = type
ã®ã¿ã§ãããããåã®ãã©ã¡ãŒã¿ãŒåã¯åœ¹ã«ç«ã¡ãŸããã
@ eric-wieserãã£ãšãä»ã¯ä¿®æ£ããããšæããŸãã
mypyã®èª²é¡è¿œè·¡ã·ã¹ãã ïŒäž»ã«python / mypyïŒ3540ïŒã«ã€ããŠããã€ãã®é¢é£ããè°è«ããããŸããã ããã§ã¯ãnumpyé åã®åã«æŠå¿µçã«æ¬¡å ãå«ãŸããŠããããšãäž»ãªåé¡ã§ãããšèªèããŠããŸãããçŸåšã®åã·ã¹ãã ã¯å®éã«ã¯ããããµããŒãããŠããŸããã mypyãŸãã¯typeshedãããžã§ã¯ãããnumpyã§ã¿ã€ãã³ã°ãæ©èœãããã®ã«äœããã®åœ¢ã§åœ¹ç«ã€å Žåã¯ããç¥ãããã ããã
mypyã®èª²é¡è¿œè·¡ã·ã¹ãã ïŒäž»ã«python / mypyïŒ3540ïŒã«ã€ããŠããã€ãã®é¢é£ããè°è«ããããŸããã ããã§ã¯ãnumpyé åã®åã«æŠå¿µçã«æ¬¡å ãå«ãŸããŠããããšãäž»ãªåé¡ã§ãããšèªèããŠããŸãããçŸåšã®åã·ã¹ãã ã¯å®éã«ã¯ããããµããŒãããŠããŸããã mypyãŸãã¯typeshedãããžã§ã¯ãããnumpyã§ã¿ã€ãã³ã°ãæ©èœãããã®ã«äœããã®åœ¢ã§åœ¹ç«ã€å Žåã¯ããç¥ãããã ããã
ããã§ã¯ããã©ã¡ãŒã¿åãããã¿ã€ãã§å€ããå°ãªããæ
å ±ããšã³ã³ãŒãããããšãæ³åã§ããŸãã ããšãã°ã np.empty((2, 3))
ãããªé
åã¯ã次ã®ããããã®ã¿ã€ãã«ãªããŸãã
Array[float64, (2, 3)]
Array[float64, (n, m)]
Array[float64, ndim=2]
Array[float64]
Array
@JelleZijlstra mypyã®ãããªããŒã«ã§åŠçã§ããå¯èœæ§ãé«ããã®ã«ã€ããŠãããã§ããªãã®æèŠã¯äœã§ããïŒ ã©ãã ãæŽç·Žããããã®ã«ãªããŸããïŒ
圢ç¶ãšæ¬¡å
ããµããŒãããã«ã¯ãåã·ã¹ãã ã§ããªãã®äœæ¥ãå¿
èŠã«ãªãããšã¯æããã§ãã ç§ã¯ãããæè¿ããŸãïŒãããŠpython / mypyïŒ3540ã«ããããã®ã¢ã€ãã¢ãæžãçããŸããïŒããä»ã®ãšãããããNumPyã®ç¯å²å€ãšåŒã³ãŸãããã numpyã®è€éãªåéå±€ãšãžã§ããªãã¯åã®èª²é¡ãèãããšã ndarray[float64]
æ©èœãããã ãã§ãååã«é£ããããã§ãã
ã¯ããæåã®ã¹ãããã¯ãnumpyïŒããã³PandasãšsklearnïŒã®åºæ¬çãªã¿ã€ãã³ã°ãµããŒããååŸããããšã§ããããããã®ã¿ã€ãã«å¯Ÿãã圢ç¶ããã®ä»ã®è¿œå ã®å¶çŽãèæ ®ããªãããšã ãšæããŸãã
ä»ã®è¿œå ã®å¶çŽã®åé¡ã¯ãdtypeïŒshape = 5,6ïŒãèšè¿°ããã ãã§ã¯äžååã§ããããã®åœ¢ç¶ã®å¶çŽãèšè¿°ããããã®èšèªãå¿ èŠã§ãããšããããšã§ãã æ£æ¹åœ¢ã®numpy圢ç¶ã®ã¿ãå ¥åãšããŠåãå ¥ããé¢æ°ããŸãã¯1ã€ã®æ¬¡å ãä»ã®æ¬¡å ã®2åã§ãªããã°ãªããªãé¢æ°ãå®çŸ©ããããšèããããšãã§ããŸãã
ãã®ãããªããšã¯å¥çŽãããžã§ã¯ãã§è¡ãããŸããã
ãŸãã PEP 472ã¯ãããã§ãµããŒãããã®ã«æé©ã ãšæããŸããããããã°ã Array[float64, ndim=2]
ãããªããšãå®éã«ã§ããããã§ãã
確ãã«ãPEP 472ã¯ã¿ã€ãã³ã°ã«é©ããŠããŸããããããå®çŸããããã®ããç°¡åãªä¿®æ£ã®1ã€ã«ãªãã§ãããã ïŒã€ã³ããã¯ã¹äœæã«ãããååä»ããã£ã¡ã³ã·ã§ã³ã®èª¬åŸåã®ãããŠãŒã¹ã±ãŒã¹ããããšæãã®ã§ãããã«é¢ããè°è«ãåéããããšã«èå³ãããå Žåã¯ãç§ã«pingããŠãã ãããïŒ
èªåãã©ã®ããã«è²¢ç®ããŠãããã¯ããããŸããããããŸããŸãªçç±ããçŽ æŽãããæ©èœã«ãªããšæããŸãã ãããããã®æ¹åã«é²ãã§ãããšã []
ããªããžã§ã¯ããåŒã³åºãå¥ã®æ¹æ³ã«ãªã£ãŠããããã«èŠããŸãã ã€ãŸãã object(*args, **kwargs)
ã¯äœããå®è¡ãã object[*args, **kwargs]
ä»ã®äœããå®è¡ããŸãããã®åŸãäžè¬åããŠobject{*args, **kwags}
ãšobject<*args, **kwargs>
ã䜿çšããããšãã§ããŸãã ;-)
@mitar ïŒndarray[float].constrain(ndim=2)
ãããªæ³šéãä»ããå¿
èŠããããŸãã ãã§ã«å©çšå¯èœãªæ§æãããããããããã³ã¬ãŒã¿ãšã¯ç°ãªããã¢ãããŒã·ã§ã³ã«ã¯å¶éããããŸãã
ç§ã¯å®éã«æ¬¡ã®æ§æãè©ŠããŸããïŒ ndarray[float](ndim=2)
ãªã®ã§ããžã§ããªãã¯ã§__call__
ãªãŒããŒããŒããããšãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªããã¯ã©ã¹ãåã³è¿ãããŸãã ãããããžã§ããªãã¯ã§ã¯ãªãåã§ã¯æ³šæãå¿
èŠã«ãªããŸããã
ndarray[float]
ã¯ndarray
ã«å®éã«ååšãããã®ã§ã¯ãªããããäž»ãªåé¡ã¯ndarray[float]
ãµããŒãã«ãããšæããŸããããã¯ã ndarray
èªäœãå€æŽããå¿
èŠããããŸããäžè¬çãªååãé©åãã©ããã¯ããããŸããïŒããé©åãªã¿ã€ãã³ã°ããµããŒãããããã«ã¢ããã¹ããªãŒã ã³ãŒããå€æŽããïŒã
ãã1ã€ã®ã¢ãããŒãã¯ãæ°ããã¿ã€ãã®åå€æ°ConstrainedTypeVar
ã䜿çšããããšã§ããããã§ã ConstrainedTypeVar('A', bound=ndarray, dtype=float, ndim=2)
ãªã©ãå®è¡ãã A
ãšããŠäœ¿çšããŸããé¢æ°ã·ã°ããã£ã®varã ããããããã¯éåžžã«åé·ã«ãªããŸãã
ãããŒããã£ã¹ãã§é åã®åœ¢ç¶ãå ¥åãããšã©ã®ããã«èŠããããããã³æ¬¡å ã®åäžæ§ã®æŠå¿µã«ã€ããŠãããã€ãã®ã¢ã€ãã¢ãèšèŒããããã¥ã¡ã³ããäœæã
ã³ã¢ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã
DimensionVar
ããªããã£ããè¿œå ãã...
ïŒ Ellipsis
ïŒãæ瀺é
åãããŒããã£ã¹ããšããŠèªèããŸããããšãã°ã np.matmul
/ @
ïŒ
from typing import DimensionVar, NDArray, overload
I = DimensionVar('I')
J = DimensionVar('J')
K = DimensionVar('K')
<strong i="17">@overload</strong>
def matmul(a: NDArray[..., I, J], b: NDArray[..., J, K]) -> NDArray[..., I, K]: ...
<strong i="18">@overload</strong>
def matmul(a: NDArray[J], b: NDArray[..., J, K]) -> NDArray[..., K]: ...
<strong i="19">@overload</strong>
def matmul(a: NDArray[..., I, J], b: NDArray[J]) -> NDArray[..., I]: ...
ãããã¯ãäžè¬åãããufuncãå ¥åã§ããããã«ããã®ã«åå
NDArray
ãšndarray
åºå¥ããããšããã§ã«éžæããŠããå Žåãdtypeãšshapeã®äž¡æ¹ããµããŒãããããã®å¯èœãªè§£æ±ºçïŒ
NDArray[float].shape[I, J, K]
NDArray[float]
NDArray.shape[I, J, K]
èããŠã¿ãã°ããã®ãããªã·ã§ãŒãã«ãããããã®ã¯çã«ããªã£ãŠããŸããïŒ
NDArray.ndim[2] # NDArray.shape[..., ...]
NDArray[float].ndim[2] # NDArray[float].shape[..., ...]
âããã«ãããç¹ã«ããŠã³ã¹ããªãŒã ã³ãŒãã§ãå€ãã®çœ²åãç°¡çŽ åãããå¯èœæ§ããããŸãã
@aldanorããªãã¯NDArray.shape[:, :]
ãæå³ãããšæããŸãïŒ ...
ã¯ããŒã以äžã®æ¬¡å
ããæå³ããŸããããã®æèã§ã¯æ£ãããããŸããïŒã ããããã¯ããããã¯åççã«èŠããŸãã
dtypesã®å
¥åã«é¢ããã¯ã€ãã¯ã¢ããããŒãïŒãã©ã¡ãŒã¿åãããndarray
/ dtype
ã¿ã€ãã«Generic
ãå«ãndarray
np.generic
ãµãã¯ã©ã¹ã䜿çšããäžèšã®ã¢ãããŒãã䜿çšããŠããã¡ãã¢ãžã¥ãŒã«ãäœæããŸããã
ããã¯ã np.empty(..., dtype=np.float32)
çžåœããåæšè«ãå«ããç§ãæåŸ
ããããã«mypyã§ã»ãšãã©æ©èœããããã§ãã Union
ã¿ã€ãã«é¢é£ããæå³çãªã¿ã€ããšã©ãŒã®1ã€ããã£ããã§ããŸããïŒåŸã§ãã°ã¬ããŒããæåºããŸãïŒã
ããã¯ããããdtypeã«ã¯ååã ãšæããŸãã ãªãã©ã«å€ã®ãµããŒããå
¥åããªããšãæååïŒ dtype='float32'
ïŒãšããŠæå®ãããdtypeã§åæšè«ãè¡ãããšãã§ããŸããdtype=float
ãããªPythonåããã®åæšè«ãåŠçããªãããšã§ãã ãã ãããããã®åã¯ãããŸãã«ãªãå¯èœæ§ãããããïŒããšãã°ã dtype=int
ã¯Linuxã§ã¯np.int64
ã«ãWindowsã§ã¯np.int32
ã«ããããããŸãïŒããšã«ããæ瀺çãªãžã§ããªãã¯åã䜿çšããããšããå§ãããŸãã ä»æ§dtype=float
ããšã©ãŒãçºçãããã®ã§ã¯ãªãAny
dtypeãšããŠæšè«ãããéããåæšè«ããã¹ãŠã®å¯èœãªå Žåã«æ©èœããªãå Žåã§ãåé¡ãããŸããã
ãã ãããããã®åã¯ãããŸãã«ãªãå¯èœæ§ããããŸãïŒããšãã°ãdtype = intã¯Linuxã§ã¯np.int64ã«ãWindowsã§ã¯np.int32ã«ããããããŸãïŒã
ããã¯ãããŸãã§ã¯ãããŸããããã¹ãŠã®å Žåã§ãC long
ã¿ã€ãã§ããnp.int_
ã«ããããããŸãã
NumPyã®ã¿ã€ãã¹ã¿ããå¥ã®ããã±ãŒãžã§äœæããããšã«ã€ããŠã³ã³ã»ã³ãµã¹ãåŸãããã«ãã¡ãŒãªã³ã°ãªã¹ããäœæããŸããã
https://mail.python.org/pipermail/numpy-discussion/2017-November/077429.html
çŽ æŽããããããããšã@shoyer ïŒ
ã¡ãŒãªã³ã°ãªã¹ãã®ã³ã³ã»ã³ãµã¹ã«åŸã£ãŠã httpsïŒ//github.com/numpy/numpy_stubsãå¶æ¥ãéå§ããŠããããšã宣èšããããšæã
åºæ¬çãªæ³šéããå§ããŸãïŒdtypeã¯ãµããŒããããŠããŸããïŒã 誰ããåºæ¬çãªPRããŸãšããŠãã¬ãã®PEP 561è¶³å Žãè¿œå ãããå Žåã¯ããããããé¡ãããŸãã
ã¯ããã¯ãã1000Xã¯ãïŒ
ãã®åé¡ããã©ããŒããŠãã人ã«æ³šæããŠãã ããïŒç§ã¯python / typingãã©ãã«ãŒã§2ã€ã®åé¡ãéããŸããïŒ
ã¿ã€ãã³ã°æ©èœã®äºæ³ãªãªãŒã¹æéã¯ã©ããããã§ããïŒ
2.7ã®äºææ§ãç¶æããããšããçç±ã¯ãããŸããïŒ
åæã®ã³ã¡ã³ãã§ã¯ãPython 2ãšã®çµ±åã®é£ããã«ã€ããŠèšåãããŠããŸããããã以æ¥ãnumpyã¯ãã®ã¹ã¿ã³ã¹ãå€ããããã§ãã
ç©äºã¯åãã¿ãŒã²ããã§ãããPython 3.4-3.6ã®ãããªãã®ãã¿ãŒã²ããã«ããããšã¯çã«ããªã£ãŠããŸããïŒ
ã¿ã€ãã³ã°æ©èœã®äºæ³ãªãªãŒã¹æéã¯ã©ããããã§ããïŒ
PyConã§ããïŒæŽæ°ãžã§ããªãã¯ãå¥ååçŽäŸååïŒã«ã€ããŠããã€ãã®è°è«ããããŸããããããã®è°è«ãšã @ shoyerã«ãã£ãŠäœæãããå
ã®ããã¥ã¡ã³ãã«åºã¥ããŠãããPEPãtyping
ã§ã®æ°ããã¿ã€ãã®åŸç¶ã®ããã¯ããŒããå¯èœæ§ãé«ãã§ãïŒ
@hmaarrfk NumPyèªäœã®åã¢ãããŒã·ã§ã³ã®èšè¿°ã«ã€ããŠã¯ãå¥ã®ãªããžããªhttps://github.com/numpy/numpy-stubsã§éå§ããŸãã
確ãã«ãç§ã¯ã§ããéãå©ããŠãããŠããããã§ãããããŠç§ã¯ãªããžããªãèŠãŸããã ç§ã¯ãããã®ããšãæéããããããšãç¥ã£ãŠããŸãã
ç§ã¯ãªããžããªãèŠãŠã2.7ã®äºææ§ã«ã€ããŠèšåãããŠããã³ãããã«æ°ã¥ããŸããããããç§ãå°ããçç±ã§ãã
Python3.8ããŒã¿ãªãªãŒã¹æéã¯2019幎åã°ã§ãã Numpyã¯ã 2018幎æ«ã«æ°æ©èœãåæ¢ãããšè¿°ã¹ãŸããã
å ¥åã¯ããå¿ é ãã§ã¯ãªããnumpyã®ãå¿ é ãæ©èœã®ããã§ãã ãã®ãããç¹ã«æ©èœãnumpyèªèº«ã®ãµããŒãæéãã¯ããã«è¶ ããŠè¡šç€ºããå§ããå Žåã¯ã2ã€ã®èšèªãã¿ãŒã²ããã«ããã®ã¯å°ãé£ããããã§ãã
@ilevkivskyiãPEPã§èšã£ãŠããããšãèªãããšã«èå³ããããŸãã
@hmaarrfk Python2.7ã®ãµããŒãã«ã€ããŠè¯ãç¹ãæããŠããŸãã æ£çŽããŸã ååã«èããŠããŸããã ã¿ã€ãã³ã°ã®äž»ãªãŠãŒã¹ã±ãŒã¹ãPython2 / 3äºæã³ãŒãã®èšè¿°ã§ããããšãèãããšãæçµçã«ã¯åé€ããããšæããŸãããmypyèªäœãPython2.7ãµããŒããåé€ããåã§ã¯ãªãã§ãããã
ä»ã®ãšãããåã¢ãããŒã·ã§ã³ã§Python 2ããµããŒãããããã«å€ãã®åŠ¥åã¯å¿ èŠãªãããã§ããç¹ã«ãæããã«èå³ãæã£ãå¯çš¿è ããã®ãã®ã§ããããšãèãããšããã®ãŸãŸã«ããŠããããšãã§ããŸãã
ãããããäžåºŠèª¿ã¹ãŠãç¹ã«ã¿ã€ããã³ãã®åœ¢ç¶æ å ±ã«é¢ããŠè°è«ãé²ãã§ãããã©ããã確èªããããšæããŸãããããã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã ã¹ããŒã¿ã¹ãã©ãã«ãŒã¯ãããŸããããããšããªãœãŒã¹ãå°çšã«ããã®ã«ååãªåªå 床ã§ã¯ãããŸãããïŒ
numpyã¢ã¯ã»ã©ã¬ãŒã¿ãŒãäžè¬åãããããžã§ã¯ãã§ããtransonic
ã¯ãã³ã¡ã³ãã䜿çšãããŸãã ä»ã®ãšããmypyã§ã¯ããŸãæ©èœããŸãããã圹ã«ç«ã€ã®ã§ã¯ãªãããšæããŸãã äŸãåç
§ããŠãã ããïŒ https ïŒ
ãã®åé¡ã«åœ¹ç«ã€å Žåã¯ãdocstringãã¿ã€ãã³ã¡ã³ãã«å€æããããã®ããŒã«ãäœæããããšããäŒãããŸãïŒ https ïŒ
ãããããã€ãã®ãããžã§ã¯ãã®pre-commitã§äœ¿çšããŠãdocstringãã¿ã€ãã³ã¡ã³ããšåæãããŸãã
ããã§ããDocstringã®ã¿ã€ããPEP484ã«æºæ ããããã«å€æããå¿ èŠããããŸãã
ã¿ãªãããããã«ã¡ã¯ã
ç§ã¯èªåã®åœ¹å²ãæããããã£ãã®ã§ããªããžããªããã©ãŒã¯ããŠã¿ã€ããã³ããè¿œå ãå§ããŸããã ç§ã®èãã¯ããã ã¢ããã§äœæ¥ããããšã ã£ãã®ã§ããåçŽãªãæ©èœããå§ããŠãããããäžã«åãã£ãŠäœæ¥ããŸãã ïŒã¶ãäžãã£ãŠããæç©ããå§ããŸãïŒ
ããšãã°ã _string_helpers.py
ã§ã¯ãããã€ãã®å€æ°ãšé¢æ°ã«åãã³ããè¿œå ããŸããã
LOWER_TABLE: str = "".join(_all_chars[:65] + _ascii_lower + _all_chars[65 + 26:])
UPPER_TABLE: str = "".join(_all_chars[:97] + _ascii_upper + _all_chars[97 + 26:])
def english_lower(s: str) -> str:
""" Apply English case rules to convert ASCII strings to all lower case.
...
"""
lowered = s.translate(LOWER_TABLE)
return lowered
ããã«ã€ããŠããªãã¯ã©ãæããŸããïŒ
ã³ã¡ã³ããåŸãããã«å°ããã£ãŠPRãéãããšããå§ãããŸãã numpyã¯å€ãpythonïŒ3.5ã§å°å ¥ãããã¢ãããŒã·ã§ã³ãIIRCïŒãã¿ãŒã²ããã«ããŠãããããã«ãããã«ããç Žæããå¯èœæ§ãããããã.pyiãã¡ã€ã«ã®äœæãæ€èšããããmypyããã¥ã¡ã³ãããã§ãã¯ããŠããã¹ããã©ã¯ãã£ã¹ã«é¢ããã¬ã€ãã³ã¹ãããå°ããããã©ããã確èªããŠãã ããã
ãããŸã§ãåå¥ã®numpy-stubã§æ³šéãä»ããŠããŸãã
ãªããžããªã§ãããããã»ã¹ãé
ããªã£ãŠããŸãã
9:57ãã³ãµãã¥ãšã«ã®æšã2019幎11æ14æ¥ã«[email protected]æžããŸããïŒ
ã³ã¡ã³ããåŸãããã«å°ããã£ãŠPRãéãããšããå§ãããŸãã numpy
å€ããã·ãããïŒ3.5å°å ¥ãããã¢ãããŒã·ã§ã³ãIIRCïŒãšãããã¿ãŒã²ããã«ããŠããŸã
ãããã®ãã«ããå£ããŠããŸãã®ã§ã.pyiãã¡ã€ã«ã®æžã蟌ã¿ãæ€èšããããã§ãã¯ããŠãã ãã
mypyã®ããã¥ã¡ã³ãã§ããã¹ããã©ã¯ãã£ã¹ã«é¢ããã¬ã€ãã³ã¹ãããå°ããããã©ããã確èªããŸããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/numpy/numpy/issues/7370?email_source=notifications&email_token=AAJJFVVH5CLAHPJKWJHDQ73QTVRMXA5CNFSM4B436CI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AAJJFVTWTKLP63AK2C2IUW3QTVRMXANCNFSM4B436CIQ
ã
@ bsamuel-uinumpyã«ã¯çŸåšPython3.5 +ãå¿
èŠã§ãããNEP-29 [1]ã¯ã3.6 +ã«ãã³ãããŠãåé¡ãªããšè¿°ã¹ãŠããŸãã
[1] https://numpy.org/neps/nep-0029-deprecation_policy.html
ã¢ãããŒã·ã§ã³ïŒé¢æ°ã®åŒæ°ãšæ»ãå€ã®åïŒã¯ãå®éã«ã¯ãã¹ãŠã®Python3ããŒãžã§ã³ã§ãµããŒããããŠããŸãã 3.6ã§ã¯å€æ°ã¢ãããŒã·ã§ã³ã®ã¿ãå°å
¥ãããŸããã åæã®Python3ããŒãžã§ã³ïŒ<3.5ïŒã§ã¯ã typing
ã¢ãžã¥ãŒã«ã®ããã¯ããŒãã䜿çšããå¿
èŠããããŸãã
æåã®.pyiãã¡ã€ã«ã§ãã«ãªã¯ãšã¹ããè¿œå ããŸããã ããã€ãã®äœæ¥ãå¿ èŠã§ãããæåã®ãã£ãŒãããã¯ãåŸãããšãã§ããããã«ãçããããããèŠãŠããã ããã°å¹žãã§ãã
gh-14905ã§è¿°ã¹ãããã«ã httpsïŒ//github.com/numpy/numpy-stubsã«ã¹ã¿ãã©ã€ãã©ãªã®å§ãŸãããã
ç§ã®æªã@mattipã numpyãããã«ãªã¯ãšã¹ããåé€ããnumpy-stubsã«æ°ãããªã¯ãšã¹ããè¿œå ããŸã
ãŸã éããŠããŸãããnumpyã¯ãã¹ã¿ãŒããŒãžã§ã³ã§ãã§ã«ããããµããŒãããŠãããšæããŸã
ããã«ã¡ã¯ã
ãã¯ãã«3dã®ã¿ã€ããšã€ãªã¢ã¹ãå®çŸ©ããããšããŠããã®ã§ãdtype int32ã®åœ¢ç¶ïŒ3ãïŒã®numpyé
åã
ïŒnp.ndarrayã§ãã³ããå ¥åã§ããããšã¯ããã£ãŠããŸãããããå ·äœçã«ããã«ã¯ã©ãããã°ããã§ããïŒããããã¹ãŠèªãã§ãããããŸããã§ãããPythonã§å ¥åããããã«numpyåã䜿çšããæ¹æ³ã«é¢ãããã¥ãŒããªã¢ã«ãæ€çŽ¢ããŸããããããŸããã§ãããäœããèŠã€ããŸããïŒ
ãããæžãããšãå¯èœã§ããããã«ïŒ
from typing import Tuple
VectorType = Tuple[int, int, int]
ç§ãããããšããïŒ
VectorType = np.ndarray(shape=(3,), dtype=np.int32)
ããã¯æ£ããæ¹æ³ã§ããïŒ
ããã®èª°ããç§ã«ãã¥ãŒããªã¢ã«ãäŸãæããŠããããŸããïŒ
ãŸãããNumpyã®ã¿ã€ããã³ããã§ãããã®ãªããžããªãèŠã€ããŸããïŒ https ïŒ
Numpyã¯ãããçµ±åããŸããïŒ
@ramonhagenaars
@mattip
gh-14905ã§è¿°ã¹ãããã«ã httpsïŒ//github.com/numpy/numpy-stubsã«ã¹ã¿ãã©ã€ãã©ãªã®å§ãŸãããã
ããã¯ã¡ã€ã³ãªããžããªã«çµ±åãããããã§ãã ããã¯ãªãªãŒã¹ãããŸãããããããšãããŒããããã«ãããŸããïŒ https://github.com/ramonhagenaars/nptypingã®ãããªãµãŒãããŒãã£ãæ¢çŽ¢ããããïŒçæ³çã«ã¯ïŒå ¬åŒã«ãµããŒããããŠããã¿ã€ããã³ããåŸ ã€/䜿çšãããã決å®ããããšããŠããŸãã
ããããšãã
numyp-stubã®å€ããéçºãã©ã³ãã«çµ±åããŸããã éçåä»ãã©ãã«ãæ¢ãããšã§ãé²è¡ç¶æ³ã远跡ã§ããŸãã ããŸãããã°ãããã¯æ¬¡ã®ãªãªãŒã¹ã®äžéšã«ãªãã§ãããã ãããããŒãžã§ã³ã®numpyã䜿çšããŠãçŸåšããŒãžãããŠãããã®ãè©Šãããšãã§ããŸãã ç§ãã¡ã¯åžžã«è²¢ç®è ãæ¢ããŠããŸããåé¡ã«é¢ãã建èšçãªã¬ãã¥ãŒãããã¥ã¡ã³ããã³ã¡ã³ãããã«ãªã¯ãšã¹ãã¯åœ¹ç«ã€ããã€ãã®æ¹æ³ã§ãã
ïŒnp.ndarrayã§ãã³ããå ¥åã§ããããšã¯ããã£ãŠããŸãããããå ·äœçã«ããã«ã¯ã©ãããã°ããã§ããïŒããããã¹ãŠèªãã§ãããããŸããã§ãããPythonã§å ¥åããããã«numpyåã䜿çšããæ¹æ³ã«é¢ãããã¥ãŒããªã¢ã«ãæ€çŽ¢ããŸããããããŸããã§ãããäœããèŠã€ããŸããïŒ
ãã®åéã«ã¯å€ãã®é¢å¿ãå¯ããããŠããŸãããNumPyé åã®ããå ·äœçãªã¿ã€ãã³ã°ïŒdtypesãšdimensionsïŒã¯ãŸã ãµããŒããããŠããŸããã
@ GilShoshan94FWIWç§ã¯https://github.com/ramonhagenaars/nptyping/issues/27ãæåºããŸãã
ãŸããFWIWããªãŒããŒããŒãã®__doc__
æååã®ã泚éãã¿ã€ãã®çœ²åã«pybind11
䜿çšãããã®ã¯æ¬¡ã®ãšããã§ãã
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/include/pybind11/eigen.h#L195 -L208
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/tests/test_eigen.py#L185
https://github.com/pybind/pybind11/blob/0af7fe6c1943e6a9043e4e01c4bc9059108a6c98/tests/test_numpy_array.py#L290
æãåèã«ãªãã³ã¡ã³ã
ãããããäžåºŠèª¿ã¹ãŠãç¹ã«ã¿ã€ããã³ãã®åœ¢ç¶æ å ±ã«é¢ããŠè°è«ãé²ãã§ãããã©ããã確èªããããšæããŸãããããã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã ã¹ããŒã¿ã¹ãã©ãã«ãŒã¯ãããŸããããããšããªãœãŒã¹ãå°çšã«ããã®ã«ååãªåªå 床ã§ã¯ãããŸãããïŒ