ë구ë ì§ í¹ì numpy.ndarray íŽëì€ì ëí ì í íížë¥Œ 구í íìµëê¹?
ì§êžì íìŽíì ì¬ì©íê³ ìëë°, ì묎거ë ì¢ ë 구첎ì ìž ê²ìŽ ììŒë©Ž ì¢ì ê² ê°ìµëë€.
ì륌 ë€ìŽ numpy ì¬ëë€ìŽ array_like ê°ì²Ž íŽëì€ì ëí ì í ë³ì¹ì ì¶ê° í 겜ì°. ë ëì ë°©ë²ì dtype ìì€ìì ì§ìì 구ííì¬ ufuncë¿ë§ ìëëŒ ë€ë¥ž ê°ì²Žë ì§ìí ì ìëë¡í©ëë€.
ì묎ë ê·žê²ì ëíŽ ìê°íì§ ìëë€ê³ ìê°í©ëë€. í¹ì ìíìëê¹? :-)
ëë ëí ë¹ì ìŽ ìŽê²ì ëí íì ì¡°ì¹ë¥Œ ìíë€ë©Ž ì°ëŠ¬ê° gh ìŽì륌 ë«ê³ í ë¡ ì ë©ìŒ ë§ëŠ¬ì€ížë¡ ì®êž°ëŒê³ ì ì í ê²ì ëë€. ê°ë°©í ëììž í ë¡ ì ë ì í©íêž° ë묞ì ëë€.
ìŽ ëµë³ì ì»ì í 묞ì 륌 ì¢ ê²°íêž°ë¡ ê²°ì íìµëë€.
ëª ííê² ë§íë©Ž, ì°ëŠ¬ë ë©ì§ ìë¡ìŽ íìŽì¬ êž°ë¥ìŽë ê·ž ìŽë€ ê²ë ì§ìíë ê²ì ëíŽ ì€ì ë¡ ë°ëíì§ ììµëë€. ì°ëŠ¬ë ë§ì ììììŽ ìì ëŽì¬ë¡ ìŽìëë íë¡ì ížìŽêž° ë묞ì êŽì¬ìŽìë ì¬ëìŽ í ëšê³ ë ëìê°ìŒë§ ìŒìŽ ë°ìí©ëë€.
ë©ìŒ ë§ëŠ¬ì€ížë ìŒë°ì ìŒë¡ 묎ìžê° ìì ì ììíê±°ë ëìì ì€ êŽì¬ìë ë€ë¥ž ì¬ëë€ì 몚ì§íë €ë ê²œì° ê°ì¥ ì¢ì ì¥ìì ëë€.
ê°ì¬í©ëë€, @njsmith. 구조íëì§ ìì ë©ìŒ ë§ëŠ¬ì€íž (ë€ë¥ž ââêž°ë¥ ì€ìì 'êž°ë¥ ìì²'í귞륌 ì°Ÿê³ ìììµëë€ ...)
ê·žë ê² ëëµ í ì¬ëìŽ ì€í ê°ë¥í íŽê²°ì±
ìŒë¡ ëŽê² ëì ìêž° ë묞ì ëë 묞ì 륌 ëšêž°êž°ë¡ ê²°ì íìµëë€.
Numpy 묞ìì ê·žì ëµë³ì í¬íšíëë¡ ì
ë°ìŽížíŽìŒ í ìë ììµëë€ (íŽë¹íë ê²œì° ë°ëì ê·žìê² í¬ë ë§ì ì ê³µíììì€).
ë€ì í ë² ê°ì¬í©ëë€!
ìë íìžì ì¬ë¬ë¶! ìŽ ë¬žì ì ëíŽ ì§ì ìŽ ììëì§ ê¶êžíìµëë€. ê°ì¬.
ì¬êž° ë©ìŒ ë§ëŠ¬ì€íž ì ê·žê²ì ëí ëª ê°ì§ ë Œìê°
ë ììží ë Œìíê³ ìíë ë¶ë€ì ìíŽìŽ 묞ì 륌 ë€ì ììíê² ìµëë€.
ëë ìŽê²ìŽ NumPyì íì€í ë°ëì§íë€ê³ ìê°íì§ë§, NumPyê° íì¬ np.array
ìì±ììì ììì ê°ì²Žë¥Œ ë°ìë€ìŽë ë°©ë²ê³Œ ê°ìŽ ì ë ¬ì ìíŽ ì
ë ¥íë NumPy APIì ëª ê°ì§ ê¹ë€ë¡ìŽ ìž¡ë©ŽìŽ ììµëë€. ìŽê²ì ì 늬íììì€, https://github.com/numpy/numpy/issues/5353 ì°žì¡°).
https://github.com/machinalis/mypy-data ìì ëª ê°ì§ ì¢ì ìì ìŽ ìíëê³ ììµëë€.
ìì ì numpy ëë typeshedë¡ ì ì€ížëŠŒìŒë¡ ížìí ì§ ì¬ë¶ì ëí í ë¡ ìŽ ììµëë€. https://github.com/machinalis/mypy-data/issues/16
CC @mrocklin
ìŽê²ì NumPyì ì ë§ í° ëììŽ ë ê²ì ëë€. ìŽê²ì typeshed ëë NumPyë¡ ë°ìŽ ì¬ëŠ¬ë ë€ì ëšê³ë 묎ìì ëê¹? ë¶ìì í ì€í ë ì ì© í ê²ìŽë©° ìœê°ì ì§ìì ëìì ëëŠ¬ê² ìµëë€.
@henryJack ììíêž° ê°ì¥ ì¢ì ê³³ì ìë§ë ë구 ìŒ ê²ì ëë€. Ʞ볞 ì í 죌ìì mypyì íšê» ìëíê³ ì ì§ì ìŒë¡ ì¶ê°íë ê²ì ì§ìíë ë°©ììŒë¡ NumPy ì ì¥ìì Ʞ볞 ì í 죌ìì íµí©íë ë°©ë² (ìŽìì ìŒë¡ë í ì€íž)ì íì íììì€.
ê·žë° ë€ì ê·¹ëë¡ ìµìíì 죌ììŒë¡ ììíë©Ž ê±°êž°ìì ê° ì ììµëë€. í¹í dtype 죌ìì ì§ì íë ì¢ì ë°©ë²ìŽ ìêž° ë묞ì ì§êžì 걎ë ë°ê² ìµëë€ (ìŠ, 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
ì ì íì 묎ìì
ëê¹?
ëë @kjyv ê° ê·žê²ë€ì ì ìíë ë° ì°ë ë€ ê³ ìê°í©ëë€.
np.empty
: https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/__init__.pyi#L523
np.linalg.svd
: https://github.com/kjyv/mypy-data/blob/master/numpy-mypy/numpy/linalg/__init__.pyi#L13
ì íìŽ ë§€ê° ë³ìí ë ê² ê°ìµëë€. ìŽê²ìŽ dtype곌 íšê» ììµëê¹? ì¹ì ë 몚ììŒë¡ ë§€ê° ë³ìííë ê²ë ê°ë¥í©ëê¹? íìŽì¬ì íìŽí 몚ëì ìŒë§ë ì êµíê² ì§ìí©ëê¹?
ê·žë ê·žë€ì dtypeì ìíŽ ë§€ê° ë³ìíë©ëë€. Ië ì
ë ¥ 몚ëì ëí ì 묞ê°ë ìëì§ë§íì§ë§ ë ê·žë¥ ìì ndarray ì íìŽ ìë€ê³ ìê° Generic[dtype, int]
ì ë§€ê° ë³ìííêž° ndim
. ëë ê·žê²ìŽ Juliaê°íë ìŒìŽëŒê³ 믿ìµëë€. 몚ìì ìœê² ë§€ê° ë³ìí í ì ìëì§ íì€íì§ ììµëë€. ëí ìŽë€ ííì ê°ì žë€ ì€ì§ ëë ì ìŽì ê·žë ê²íì§ ìì ìŽì ë íì í ì ììµëë€.
dtype ë§€ê° ë³ìì numpy dtypeì ì¬ì©í ì ììµëê¹? ìëë©Ž ì
ë ¥ ë§ í ì ììµëê¹?
몚ë ì í?
ëí numpy.emptyê° Any ì íì ë°°ìŽì ë°ííë ê²ë ìŽìí©ëë€. ìì 컚ë°
dtype = í€ìë ê°ìì ì íì ìží° ë° ê°ì ž ì€ë ê²ìŽ ìŽë µìµëê¹?
2017 ë 9 ì 1 ìŒ ì€í 6:42ì "Jacques Kvam" [email protected]ìŽ ìì±íìµëë€.
ê·žë ê·žë€ì dtypeì ìíŽ ë§€ê° ë³ìíë©ëë€. ëë íìŽíì ëí ì 묞ê°ê° ìëëë€.
몚ëìŽì§ë§ ndarray ì íìŽ Generic [dtype,
int]륌 ì¬ì©íì¬ ndimìì ë§€ê° ë³ìíí©ëë€. ëë ê·žê²ìŽ Juliaê°íë ìŒìŽëŒê³ 믿ìµëë€. ë ìëë€
몚ìì ìœê² ë§€ê° ë³ìí í ì ìëì§ íìžíììì€. ëë 묎ìì íì íì§ ìëë€
ê°ì žë€ ì€ íí ëë ì ê·žë ê²ëì§ ììëì§ ê·ž ìŽì 륌 ì²ìë¶í°.â
ë¹ì ìŽ ìžêž ëìêž° ë묞ì ìŽê²ì ë°ê³ ììµëë€.
ìŽ ìŽë©ìŒì ì§ì ëµì¥íê³ GitHubìì íìžíìžì.
https://github.com/numpy/numpy/issues/7370#issuecomment-326698639 ëë ììê±°
ì€
https://github.com/notifications/unsubscribe-auth/AASszMlYO7iHdoPE_GU--njIYICSVVZ0ks5seIhFgaJpZM4Hm_CR
.
numpy dtypes륌 ì¬ì©í ì ììŒë©° ì ìíêž° ë§íë©Žë©ëë€. np.std륌 ì¬ì©íì¬ floating
ë¡ ì¬êž°ìì ìíëììµëë€.
ëë ê·žê²ìŽ ê°ë¥íë€ê³ ìê°íì§ ìëë€. ìžì ê°ì ë°ëŒ ì¶ë ¥ ì íì ìì í ì ìë€ê³ ìê°í©ëë€. ì°ëŠ¬ê° í ììë ìµì ì ì°ëŠ¬ê° ì 겜 ì°ë 몚ë ì í ì 묞íë¡ íšì륌 ì€ë²ë¡ëíë ê²ì ëë€.
https://docs.python.org/3/library/typing.html#typing.overload
ë ë€ë¥ž ìµì
ì ì격í ì íì ë³ì¹ì ëì
íë ê²ìŽë¯ë¡ np.empty[dtype]
ë ìëª
ìŽ (ShapeType) -> ndarray[dtype]
íšìì
ëë€.
í¹ìŽí np.cast[dtype](x)
êž°ë¥ì ëí ì ë¡ê° ìŽë¯ž ììµëë€.
@jwkvam ì¢ìµëë€ . ê·žëì 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
맀íí©ëë€.
ìëíë í ê°ì§ ì ê·Œ ë°©ìì ììê° ìë ê° ì ìì ëíŽ íŽëì€ë¥Œ ì ìíë ê²ì
ëë€ (ì : Zero
, One
, Two
, Three
, .. . ê·žë° ë€ì ê°ê°ì ëí ì€ë²ë¡ë륌 ì ìí©ëë€. ê·žê²ì ë§€ì° ë¹šëŠ¬ íŒê³€íŽì§ ê²ì
ëë€.
TensorFlowìì tf.Dimension()
ë° tf.TensorShape()
륌 ì¬ì©íë©Ž 몚ìì ì ì ìŒë¡ ííí ì ììµëë€. ê·žë¬ë ê·žê²ì ì í ìì€í
ìì ìíëë ê²ìŽ ìëëë€. ì€íë € ê° íšììë ì
ë ¥ ë° í
ìê° ìë ìžìì 몚ììì ì¶ë ¥ì ì ì 몚ìì ê²°ì íë ì°êŽë ëì°ë¯žê° ììµëë€. NumPyë¡ìŽ ìì
ì ìííë €ë©Ž ë¹ì·í ê²ìŽ íìíë€ê³ ìê°íì§ë§ Pythons íìŽí ìì€í
ìë ìŽë¬í ì¢
ë¥ì ì ì°ì±ì ì ìíë ê²ìŽ ììµëë€.
@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
ì ê°ì dtypes륌 í
ì€íž í ì ììµëë€. Ʞ볞 ìžì륌 ì ê±°íŽìŒíì§ë§ ìŽë»ê² ìëíëì§ ì ì ìììµëë€.
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)
ì€ë¥ê° ììµëë€. ê³µë³ìŒë¡ íìë ê²ìŽ ìë€ê³ ìê°íì§ë§.
ë¹ë¡ íì ìì€í ìŽ ì°ëŠ¬ê° ìíëë§íŒ ì êµíì§ë ìì§ë§. ì¬ì í ê·žë§í ê°ì¹ê° ìë€ê³ ìê°íìëê¹? ì ê° ê°ì¬ í ììë í ê°ì§ ìŽì ì jedi륌 íµí ë ëì ìœë ìì±ì ëë€.
ì íì ë°êŸžë©Ž ìœê° íŒë ì€ëœìµëë€.
ì¬êž°ì 묞ì ë int
ìžì€íŽì€ê° float
죌ìì ëíŽ ìì ì ìŒë¡ ì íší ê²ìŒë¡ ê°ì£Œëë€ë ê²ì
ëë€. PEP ì
ë ¥ìì ì«ì íìì ëí ì°žê³ ì¬íì ì°žì¡°íììì€.
https://www.python.org/dev/peps/pep-0484/#the -numeric-tower
ëë ì°ëŠ¬ê° ì륌 ë€ìŽ 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 repoìì ê·žë ê²íìµëë€.
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
ëí ì ë€ëŠ íììŽ ë íìê°ìë€, ê·žëŠ¬ê³ ë¹ì ì ê°ì NumPyì ìŒë°ì ìž ìëž íŽëì€ì Ʞ볞 ê°ì ì€ì íŽìŒ np.float64
볎ë€ë float
, ì륌 ë€ë©Ž,
# 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 몚ì ë§ ì ë ¥ìŒë¡ ë°ìë€ìŽê±°ë í ì°šììŽ ë€ë¥ž ì°šìì 2 ë°° ì¬ìŒíë íšì륌 ì ìíê³ ì¶ë€ê³ ììí ì ììµëë€.
ê·žë° ìŒìŽ ê³ìœ íë¡ì íž ìì ìŽë£šìŽì¡ìµëë€.
ëë ëí PEP 472 ê° ì¬êž°ì ì§ìíêž°ì ì¢ì ê²ìŽëŒê³ ìê°í©ëë€. Array[float64, ndim=2]
ì ê°ì ìŒì í ì ìêž° ë묞ì
ëë€.
ì€ì ë¡ PEP 472ë íìŽííêž°ì ì¢ì ê²ì ëë€.íì§ë§ ìŽê²ìŽ ê°ë¥íê²íë ë ì¬ìŽ ìì ì€ íë ìŒ ê²ì ëë€! (ìžë±ì±ìì ëª ëª ë ì°šìì ëí ì€ëë ¥ìë ì¬ì© ì¬ë¡ë ìë€ê³ ìê°íë¯ë¡ ìŽì ëí ë Œì륌 ë€ì ììíë ë° êŽì¬ìŽ ììŒìë©Ž ì 륌 ííììì€.)
ëŽê° ìŽë»ê² êž°ì¬íëì§ ì ëªšë¥Žê² ì§ë§ ì¬ë¬ ê°ì§ ìŽì ë¡ ë©ì§ êž°ë¥ìŽ ë ê²ìŽëŒê³ ìê°í©ëë€. ê·žë¬ë ì°ëŠ¬ë ê·ž ë°©í¥ìŒë¡ ê°ê³ ìëë° []
ë ê°ì²Žë¥Œ ížì¶íë ë€ë¥ž ë°©ë²ìŽëë ê² ê°ìµëë€. ê·žëì 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[float]
ë ndarray
ì ì€ì ë¡ ì¡Žì¬íë ê²ìŽ ìëêž° ë묞ì ndarray
ì첎륌 ë³ê²œíŽìŒí©ëë€. (ë ëì íìŽíì ì§ìíêž° ìíŽ ì
ì€ížëŠŒ ìœë륌 ë³ê²œíë) ì¢ì ìŒë°ì ìž ìì¹ìŽ ìëì§ ì ëªšë¥Žê² ìµëë€.
í ê°ì§ ë€ë¥ž ì ê·Œ ë°©ìì 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]: ...
ìŽê²ë€ì ìŒë°í ë ufuncs ì ë ¥ì íì©íêž°ì 충ë¶í©ëë€. ììží ëŽì©ê³Œ ìì ë 묞ì륌 ì°žì¡°íììì€.
ìŽë¯ž NDArray
ë° ndarray
구ë³íêž°ë¡ ì íí ê²œì° dtype ë° ëªšìì 몚ë ì§ìíë ê°ë¥í ì룚ì
:
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[:, :]
( ...
ë "0 ê° ìŽìì ì°šì"ì ì믞 íë©°ìŽ ë¬žë§¥ììë ì ì íì§ ììµëë€). ê·žë¬ë ì, ê·žê²ì í©ëŠ¬ì ìŒë¡ 볎ì
ëë€.
dtypes ì
ë ¥ì ëí ë¹ ë¥ž ì
ë°ìŽíž : ë§€ê° ë³ìí ë ndarray
/ dtype
ì íì ëíŽ Generic
ì íšê» np.generic
íì íŽëì€ë¥Œ ì¬ì©íë ììì ì€ëª
í ì ê·Œ ë°©ìì ì¬ì©íì¬ ì¥ëê° ëªšë ì ìì±íìµëë€ Generic
.
ìŽê²ì np.empty(..., dtype=np.float32)
ì ëë±í ì í ì¶ë¡ ì í¬íšíì¬ ììëë¡ mypyìì ìëíë ê²ì²ëŒ 볎ì
ëë€. Union
ì í곌 êŽë šë ëŽ ìëì ìž ì í ì€ë¥ ì€ íë륌 í¬ì°©íì§ ëª»í©ëë€ (ëì€ì ë²ê·ž ë³Žê³ ì륌 ì ì¶íê² ìµëë€).
ëë ìŽê²ìŽ ìë§ë dtypesì 충ë¶í ê²ìŽëŒê³ ìê°í©ëë€. 늬í°ëŽ ê°ì ëí ì
ë ¥ ì§ì ììŽë dtypeìŽ ë¬žììŽ ( dtype='float32'
)ë¡ ì§ì ë íì ì ì¶ë¥Œ ìí í ì ììµëë€. ë 묞ì ê° ë ì ìì§ë§ dtype=float
ì ê°ì Python ì íì ì í ì¶ë¡ ë ì²ëŠ¬íì§ ììµëë€. ê·žë¬ë ìŽë¬í ì íì ëªšíž í ì ììµëë€ (ì : dtype=int
ë Linuxìì np.int64
dtype=int
맀íëê³ 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 ì!
ìŽ ë¬žì 륌 ë°ë¥Žë 몚ë ì¬ëì ìíŽ ê²œê³ í©ëë€. íìŽì¬ / íìŽí ì¶ì êž°ìì ë ê°ì§ 묞ì 륌 ìŽììµëë€.
íìŽí êž°ë¥ì ìì ì¶ì ìê°ì ìŽë»ê²ë©ëê¹?
2.7 ížíì±ì ì ì§íë €ë ìŽì ê° ììµëê¹?
ìŽêž° ì견ì íìŽì¬ 2ìì íµí©ì ìŽë €ìì ìžêžíìµëë€. ê·ž ìŽíë¡ numpyë ì
ì¥ì ë°êŸŒ ê² ê°ìµëë€.
ì¬ë¬ŒìŽ ìì§ìŽë ëììŽì§ë§ Python 3.4-3.6곌 ê°ì ëìì ì§ì íë ê²ìŽ í©ëŠ¬ì ì ëê¹?
íìŽí êž°ë¥ì ìì ì¶ì ìê°ì ìŽë»ê²ë©ëê¹?
PyConìì ìŽì ëí ëª ê°ì§ ë
Œì (ì ì ì ë€ëŠ ìŒëª
ëšì ì¢
ì ì í)ê° ìììŒë©°,ìŽ í ë¡ ê³Œ @shoyerê° ìì±í ì볞 묞ì륌 êž°ë°ìŒë¡ íë¡í ìì±í ê²ì
ëë€. ëŽ ëª©íë (ìë¡ìŽ ì íì íì ë°± í¬íž PEPììŽ mypy 구í ë° íìŽì¬ 3.8 ë² í 1 ìê°ì ë°ì, ìì± ì»ë ê²ì
ëë€ typing
ê°ë¥ì±ìŽ ëì íìŽì¬ 2ë©ëë€)
NumPy ì첎ì ëí ì í ìŽë ží ìŽì ìì±ì êŽíŽì ë https://github.com/numpy/numpy-stubs) ìììŽë¥Œ ììíìµëë€
ë¬Œë¡ ì
ëë€. ì ê° í ììë ê³³ì ëì ë늬ê²ëìŽ êž°ì©ëë€. ê·žëŠ¬ê³ ì ì¥ì륌 볎ììµëë€. ëë ìŽë¬í ìŒì ìê°ìŽ 걞늰ë€ë ê²ì ìê³ ììµëë€.
ëë repo륌 볎ìê³ 2.7 ížíì±ì ìžêž í 컀ë°ì ë°ê²¬íìµëë€.
Python 3.8 ë² í ëŠŽëŠ¬ì€ ìê°ì 2019 ë ì€ë° ì ëë€. Numpyë 2018 ë ë§ì ìë¡ìŽ êž°ë¥ì ì€ëš í ê²ìŽëŒê³ ìžêžíìµëë€.
íìŽíì "íìí"ìŽ ìë numpyìê² "ììŽì ì¢ì"êž°ë¥ìž ê² ê°ìµëë€. ë°ëŒì ë ìžìŽë¥Œ íê²í íë ê²ì ìœê° ìŽë €ìŽ ê² ê°ìµëë€. í¹í êž°ë¥ìŽ numpyì ì§ì êž°íì íšì¬ ëìŽì 볎ìŽêž° ììíë€ë©Ž ëì± ê·žë ìµëë€.
ì ë @ilevkivskyi ê° PEPìì ë§íë ëŽì©ì ìœê³
@hmaarrfk Python 2.7 ì§ìì ëíŽ ì¢ì ì§ì ìíìµëë€. ìì§í ë§íŽì ìì§ ìì í ìê°íì§ ëª»íìµëë€. ëë ì°ëŠ¬ê° ê²°êµ ê·žê²ì ìì í ê²ìŽëŒê³ ììíì§ë§, íìŽíì 죌ì ì¬ì© ì¬ë¡ê° Python 2/3 íží ìœë륌 ìì±íë€ë ì ì ê°ìí ë mypy ìì²Žê° Python 2.7 ì§ìì ìì íêž° ì ìë ìë ê²ì ëë€.
íì¬ë¡ìë íì ìŽë ží ìŽì ìì Python 2륌 ì§ìíë ë° ë§ì ííìŽ íìíì§ ìì ê² ê°ìŒë¯ë¡ í¹í êŽì¬ìŽìë êž°ê³ ìë¡ë¶í° ììì ê°ìí ë ê·ž ì늬ì ëšê²š ëê²ëìŽ êž°ì©ëë€.
í¹í ë§ì ìì© íë¡ê·žëšìì í¹í ì ì©í ì í íí 몚ì ì 볎ì êŽë šíì¬ í ë¡ ìŽ ì§íëìëì§ íìžíêž° ìíŽ ìŽê²ì ë€ì ì°ë¥Žê³ ì¶ììµëë€. ìí ì¶ì êž°ê° ììµëê¹ ìëë©Ž ì ì© ëŠ¬ìì€ë¥Œ ê°ì§ë§íŒ ì°ì ììê° ëì§ ììµëê¹?
numpy ì¡ì
ë¬ë ìŽí°ë¥Œ ìŒë°ííë íë¡ì íž ìž transonic
ìë 죌ìì ì¬ì©íë Pythran 죌ì ì ëììŒë¡ ì í ííž êµ¬ë¬žìŽ ììµëë€. ì§êžì mypyì ì ìëíì§ ìì§ë§ ì ì©í ì§ ê¶êží©ëë€. ì륌 ì°žì¡°íììì€ : https://transonic.readthedocs.io/en/latest/examples/type_hints.html
ìŽ ë¬žì ì ì ì©í ê²œì° ë¬žì 묞ììŽì 죌ì ì íìŒë¡ ë³ííë ë구륌 ë§ë€ììµëë€. https://pypi.org/project/doc484/
ì¬ë¬ íë¡ì ížìì ì¬ì 컀ë°ê³Œ íšê» ìŽê²ì ì¬ì©íì¬ ë ì€ížë§ì ì í 죌ì곌 ëêž°í ìíë¡ ì ì§í©ëë€.
ì¬ì í 묞ìí 묞ììŽì ì íì 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ìì 죌ìì ìì±íìµëë€.
ì ì¥ììŽì§ë§ ë늰 íë¡ìžì€ììµëë€.
2019 ë 11 ì 14 ìŒ ëª©ììŒ ì€ì 9:57 Ben Samuel [email protected] ì ë€ì곌 ê°ìŽ ìŒìµëë€.
ì견ì ì»êž° ìíŽ ìœê°ì ìì ì ìííê³ PRì ì¬ë ê²ìŽ ì¢ìµëë€. numpy
ìŽì íìŽì¬ (3.5 ëì ë 죌ì, IIRC)ì ëììŒë¡íë©°
ë¹ëê° ê¹šì§ ì ììŒë¯ë¡ .pyi íìŒì ìì±íê±°ë
mypy 묞ì륌 ì°žì¡°íì¬ ëªšë² ì¬ë¡ì ëí ì§ì¹šìŽ ë ìëì§ íìžíììì€.â
ë¹ì ìŽ ìžêž ëìêž° ë묞ì ìŽê²ì ë°ê³ ììµëë€.
ìŽ ìŽë©ìŒì ì§ì ëµì¥íê³ GitHubìì íìžíìžì.
https://github.com/numpy/numpy/issues/7370?email_source=notifications&email_token=AAJJFVVH5CLAHPJKWJHDQ73QTVRMXA5CNFSM4B436CI2YY3PNVWWK3TUL52HS4DFVRWSG43VMVLOBW63LNEEG43VMVORBW63LNEEMVXHJK
ëë 구ë ì·šì
https://github.com/notifications/unsubscribe-auth/AAJJFVTWTKLP63AK2C2IUW3QTVRMXANCNFSM4B436CIQ
.
@ bsamuel-ui numpyë íì¬ Python 3.5 ìŽìì íìë¡íë©° NEP-29 [1]ì 3.6 ìŽììŒë¡ ì¬ë €ë êŽì°®ì ê²ìŽëŒê³ ë§í©ëë€.
[1] https://numpy.org/neps/nep-0029-deprecation_policy.html
죌ì (íšì ìžì ë° ë°í ì í)ì ì€ì ë¡ ëªšë Python 3 ë²ì ìì ì§ìë©ëë€. 3.6ì ë³ì 죌ì ë§ ëì
íìµëë€. ìŽêž° Python 3 ë²ì (<3.5)ììë typing
몚ëì ë°± í¬ížë¥Œ ì¬ì©íŽìŒí©ëë€.
첫 ë²ì§ž .pyi íìŒì pull ìì²ì ì¶ê°íìµëë€. ìœê°ì ìì ìŽ íìíì§ë§ ìŽêž° íŒëë°±ìë°ì ì ìëë¡ ì¬ë¬ë¶ìŽ ìŽíŽ 볎ìë©Ž ì¢ì ê²ì ëë€.
gh-14905ìì ìžêžíë¯ìŽ https://github.com/numpy/numpy-stubsì ì€í ëŒìŽëžë¬ëŠ¬ì ìììŽ
ëŽ ëì @mattip. numpyìì pull ìì²ì ì ê±°íê³ 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://github.com/ramonhagenaars/nptyping
Numpyê° ìŽê²ì íµí©í©ëê¹?
ìë
íìžì.
@mattip
gh-14905ìì ìžêžíë¯ìŽ https://github.com/numpy/numpy-stubsì ì€í ëŒìŽëžë¬ëŠ¬ì ìììŽ
ìŽê²ìŽ ë©ìž ì ì¥ìì ë³í© ë ê² ê°ìµëë€. ìŽê²ìŽ ëŠŽëŠ¬ì€ ëììµëê¹, ìëë©Ž ë¡ë맵ì ììµëê¹? https://github.com/ramonhagenaars/nptyping 곌 ê°ì íì¬ë¥Œ íìíŽìŒíëì§ ëë (ìŽìì ìŒë¡ë) ê³µìì ìŒë¡ ì§ìëë ì í íížë¥Œ ëêž° / ì¬ì©íŽìŒíëì§ ê²°ì íë €ê³ í©ëë€.
ê°ì¬.
ë§ì numyp-stubì ê°ë° ëžëì¹ì ë³í©íìµëë€. ì ì ì ë ¥ ë ìŽëž ì ì°Ÿì ì§í ìí©ì íìží ì ììµëë€. ìŽê²ìŽ ë€ì 늎늬ì€ì ìŒë¶ê°ëꞰ륌 ë°ëëë€. numpyì HEAD ë²ì ì ì¬ì©íì¬ íì¬ ë³í© ë ê²ì ìííŽ ë³Œ ì ììµëë€. ì°ëŠ¬ë íì êž°ì¬ì륌 ì°Ÿê³ ììµëë€. 걎ì€ì ìž ê²í , 묞ìí, ìŽìì ëí ì견곌 í ìì²ìŽ ëììŽ ë ììë ëª ê°ì§ ë°©ë²ì ëë€.
(ëë np.ndarray륌 ì¬ì©íì¬ íížë¥Œ ì ë ¥ í ì ìë€ë ê²ì ìê³ ìì§ë§ ìŽë»ê² ë 구첎ì ìŒë¡ ì ì ììµëê¹? ì¬êž°ìì 몚ë ìœìì§ë§ ì»ì§ 못íìµëë€. ëí Pythonìì ì ë ¥íêž° ìíŽ numpy ì íì ì¬ì©íë ë°©ë²ì ëí ììµì륌 ê²ìíì§ë§ ê·žë ì§ ìììµëë€. 묎ììŽë ì°ŸìŒììì€.)
ìŽ ììì ë§ì êŽì¬ìŽ ìì§ë§ NumPy ë°°ìŽì ëíë³Žë€ êµ¬ì²Žì ìž ì í (dtypes ë° ì°šì)ì ìì§ ì§ìëì§ ììµëë€.
@ GilShoshan94 FWIW 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
ê°ì¥ ì ì©í ëêž
í¹í ë§ì ìì© íë¡ê·žëšìì í¹í ì ì©í ì í íí 몚ì ì 볎ì êŽë šíì¬ í ë¡ ìŽ ì§íëìëì§ íìžíêž° ìíŽ ìŽê²ì ë€ì ì°ë¥Žê³ ì¶ììµëë€. ìí ì¶ì êž°ê° ììµëê¹ ìëë©Ž ì ì© ëŠ¬ìì€ë¥Œ ê°ì§ë§íŒ ì°ì ììê° ëì§ ììµëê¹?