numpy.ndarray에 대한 힌트/주석 입력(PEP 484)
특정 클래스에 대해 유형 암시를 실행한 사람이 있습니까?
지금은 사용하고 있지만 좀 더 구체적인 것이 있으면 좋을 것 같습니다.
예를 들어, NumPy 사용자가 array_like 객체 클래스에 대한 유형 별칭을 추가한 경우.더 나은 것은, ufunc뿐만 아니라 다른 개체도 지원할 수 있도록 dtype 수준에서 지원을 구현하는 것입니다.
갱신하다
최신 Numpy 버전에서 새 항목 확인typing
모듈
https://numpy.org/doc/stable/reference/typing.html#module-numpy.typing
날짜가 정해진 대답
처럼 보입니다.typing
모듈 개발 위치:
https://github.com/python/typing
메인numpy
저장소 위치
https://github.com/numpy/numpy
Python 버그 및 커밋은 다음에서 추적할 수 있습니다.
기능을 추가하는 일반적인 방법은 기본 리포지토리를 포크하고 기능이 폭탄 방지가 될 때까지 개발한 다음 끌어오기 요청을 제출하는 것입니다.프로세스의 다양한 시점에서 다른 개발자의 피드백을 원하는 것은 분명합니다.만약 당신이 직접 개발을 할 수 없다면, 당신은 그것이 가치 있는 프로젝트라고 다른 사람을 설득해야 합니다.
cython
주석의 형태를 가지며, 이는 효율적으로 생성하는 데 사용됩니다.C
암호를
당신은 다음을 참조했습니다.array-like
의 단락.numpy
문서화참고:typing
정보:
array()를 사용하여 객체를 numpy 배열로 변환할 수 있는지 확인하는 간단한 방법은 대화식으로 시도하고 작동하는지 확인하는 것입니다! (Python Way).
다른 말로 하면,numpy
개발자들은 고정되기를 거부합니다.그들은 어떤 종류의 물체가 변환될 수 있는지 또는 변환될 수 없는지를 말로 설명할 수 없습니다.np.ndarray
.
In [586]: np.array({'test':1}) # a dictionary
Out[586]: array({'test': 1}, dtype=object)
In [587]: np.array(['one','two']) # a list
Out[587]:
array(['one', 'two'],
dtype='<U3')
In [589]: np.array({'one','two'}) # a set
Out[589]: array({'one', 'two'}, dtype=object)
사용자 자신의 함수에 대해 다음과 같은 주석을 사용합니다.
def foo(x: np.ndarray) -> np.ndarray:
작동합니다. 물론 당신의 기능이 어떤 사람들에게 전화를 걸게 된다면요.numpy
인수를 전달하는 함수asanyarray
(많은 사람들이 하는 것처럼), 당신의 입력이 될 수 있기 때문에, 그러한 주석은 불완전할 것입니다.list
또는np.matrix
,기타.
이 질문과 대답을 평가할 때, 날짜에 주목하세요. 484는 그 당시 비교적 새로운 PEP였고, 아직 개발 중인 표준 Python에 사용하기 위한 코드입니다.하지만 제공된 링크는 여전히 유효한 것 같습니다.
Numpy 1.21은 다음을 포함합니다.numpy.typing
을 구성합니다.NDArray
제네릭 형식
Numpy 1.21 문서에서:
numpy.typing.NDArray = numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]]
의 일반 입니다.
np.ndarray[Any, np.dtype[+ScalarType]]
.지정된 dtype과 지정되지 않은 모양을 가진 배열을 입력하기 위해 런타임 중에 사용할 수 있습니다.
예:
>>> import numpy as np >>> import numpy.typing as npt >>> print(npt.NDArray) numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]] >>> print(npt.NDArray[np.float64]) numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]] >>> NDArrayInt = npt.NDArray[np.int_] >>> a: NDArrayInt = np.arange(10) >>> def func(a: npt.ArrayLike) -> npt.NDArray[Any]: ... return np.array(a)
2022-09-05 현재, 도형 지원은 numpy/numpy#16544에 따라 여전히 진행 중인 작업입니다.
당사에서는 다음을 사용해 왔습니다.
from typing import TypeVar, Generic, Tuple, Union, Optional
import numpy as np
Shape = TypeVar("Shape")
DType = TypeVar("DType")
class Array(np.ndarray, Generic[Shape, DType]):
"""
Use this to type-annotate numpy arrays, e.g.
image: Array['H,W,3', np.uint8]
xy_points: Array['N,2', float]
nd_mask: Array['...', bool]
"""
pass
def compute_l2_norm(arr: Array['N,2', float]) -> Array['N', float]:
return (arr**2).sum(axis=1)**.5
print(compute_l2_norm(arr = np.array([(1, 2), (3, 1.5), (0, 5.5)])))
우리는 실제로 이 주변에 MyPy 검사기를 가지고 있습니다. 이 검사기는 모양이 잘 되는지 확인합니다(어느 시점에 공개해야 합니다).유일한 것은 PyCharm을 만족시키지 못한다는 것입니다(즉, 여전히 불쾌한 경고 라인이 표시됩니다).
nptyping은 numpy 유형 힌트를 지정할 수 있는 많은 유연성을 제공합니다.
내가 한 일은 그저 그것을 정의하는 것이었습니다.
받아쓰기[Tuple[int, int], TYPE]
예를 들어, 플로트 배열을 원하는 경우 다음을 수행할 수 있습니다.
a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]
물론 문서화 관점에서 정확한 것은 아니지만, 정확한 사용법을 분석하고 pyCharm을 사용하여 적절한 완성을 얻는 데는 매우 유용합니다.
언급URL : https://stackoverflow.com/questions/35673895/type-hinting-annotation-pep-484-for-numpy-ndarray
'code' 카테고리의 다른 글
Angular4로 업그레이드한 후 'require' 이름을 찾을 수 없습니다. (0) | 2023.05.13 |
---|---|
구조체에 "new"를 사용하면 힙이나 스택에 할당됩니까? (0) | 2023.05.13 |
카르마-재스민 유닛 테스트 사례를 작성하는 동안 "오류: 라우터 공급자 없음" (0) | 2023.05.13 |
사용자 존재 여부 확인 (0) | 2023.05.13 |
코드 검토 후 꺼내기 요청 업데이트를 위한 기본 Github 워크플로우 (0) | 2023.05.13 |