Numpy: ndarray, dtype 및 ufunc에 대한 유형 힌튾 / 죌석 (PEP 484)

에 만든 2016년 03월 02음  Â·  70윔멘튞  Â·  출처: numpy/numpy

Ʞ능 요청 : Numpy 데읎터 구조륌 사용하는 PEP 484에 대한 유Ʞ적 지원.

누구든지 특정 numpy.ndarray 큎래슀에 대한 유형 힌튞륌 구현 했습니까?

지ꞈ은 타읎핑을 사용하고 있는데, 아묎거나 좀 더 구첎적읞 것읎 있윌멎 좋을 것 같습니닀.

예륌 듀얎 numpy 사람듀읎 array_like 객첎 큎래슀에 대한 유형 별칭을 추가 한 겜우. 더 나은 방법은 dtype 수쀀에서 지원을 구현하여 ufunc뿐만 아니띌 닀륞 개첎도 지원할 수 있도록합니닀.

원래 SO 질묞

01 - Enhancement static typing

가장 유용한 댓Ꞁ

특히 많은 응용 프로귞랚에서 특히 유용한 유형 힌팅 몚양 정볎와 ꎀ렚하여 토론읎 진행되었는지 확읞하Ʞ 위핎 읎것을 닀시 찌륎고 싶었습니닀. 상태 추적Ʞ가 있습니까 아니멎 전용 늬소슀륌 가질만큌 우선 순위가 높지 않습니까?

몚든 70 댓Ꞁ

아묎도 귞것에 대핮 생각하지 않는닀고 생각합니닀. 혹시 원하십니까? :-)

나는 또한 당신읎 읎것에 대한 후속 조치륌 원한닀멎 우늬가 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://github.com/kjyv/mypy-data/blob/24ea87d952a98ef62680e812440aaa5bf49753ae/numpy-mypy/numpy/__init__.pyi#L198

나는 귞것읎 가능하닀고 생각하지 않는닀. 읞수 값에 따띌 출력 유형을 수정할 수 없닀고 생각합니닀. 우늬가 할 수있는 최선은 우늬가 신겜 쓰는 몚든 유형 전묞화로 핚수륌 였버로드하는 것입니닀.

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)) 와 같은 배엎은 닀음 유형 쀑 하나 음 수 있습니닀.

  1. Array[float64, (2, 3)]
  2. Array[float64, (n, m)]
  3. Array[float64, ndim=2]
  4. Array[float64]
  5. 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. 귞러나 읎것은 맀우 장황 핎집니닀.

나는 방송곌 찚원의 정첎성에 대한 개념윌로 ë°°ì—Ž 형태륌 타읎핑하는 것읎 ì–Žë–€ 몚습 음지에 대한 몇 가지 아읎디얎륌 가진 묞서 륌

핵심 아읎디얎는 닀음곌 같습니닀.

  1. ë°°ì—Ž 찚원에 대한 Ʞ혞 ID륌 허용하는 DimensionVar Ʞ볞 요소 추가
  2. ... ( 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 예!

읎 묞제륌 따륎는 몚든 사람을 위핎 겜고합니닀. 파읎썬 / 타읎핑 추적Ʞ에서 두 가지 묞제륌 엎었습니닀.

  • 음반적윌로 ndarray 입력 (https://github.com/python/typing/issues/513)
  • ndarray 타읎핑 구묞 (https://github.com/python/typing/issues/516)

타읎핑 Ʞ능의 예상 출시 시간은 얎떻게됩니까?
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

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉