Escriba sugerencia/anotación(PEP 484) para numpy.ndarray
multidimensional-array python-3.5 (3)
¿Alguien ha implementado sugerencias de tipo para la clase numpy.ndarray específica?
En este momento, estoy usando typing.Any . typing.Any , pero sería bueno tener algo más específico.
Por ejemplo, si las personas numpy añadieron un alias tipo para su clase de objeto array_like . Mejor aún, implemente el soporte en el nivel de tipo, para que otros objetos sean compatibles, así como ufunc .
Echa un vistazo a DataShape . Utiliza los tipos de datos, así como algunas sintaxis de cuán grandes deben ser las matrices de entrada y salida.
Lo que hice fue simplemente definirlo como
Dict [Tuple [int, int], TYPE]
Entonces, por ejemplo, si quieres una serie de carrozas puedes hacer:
a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]
Por supuesto, esto no es exacto desde la perspectiva de la documentación, pero para analizar el uso correcto y completarlo correctamente con pyCharm ¡funciona muy bien!
Parece que el módulo de typing
se desarrolló en:
https://github.com/python/typing
El principal repositorio numpy
está en
https://github.com/numpy/numpy
Los errores y confirmaciones de Python se pueden rastrear en
La forma habitual de agregar una función es bifurcar el repositorio principal, desarrollar la función hasta que sea a prueba de bombas y luego enviar una solicitud de extracción. Obviamente, en varios momentos del proceso, quiere comentarios de otros desarrolladores. Si no puede hacer el desarrollo usted mismo, entonces tiene que convencer a alguien de que es un proyecto que vale la pena.
cython
tiene una forma de anotaciones, que utiliza para generar código C
eficiente.
Ha hecho referencia al párrafo array-like
en la documentación numpy
. Tenga en cuenta su información de typing
:
Una forma simple de averiguar si el objeto se puede convertir en una matriz numpy usando una matriz () es simplemente intentarlo de manera interactiva y ver si funciona. (La forma de Python).
En otras palabras, los desarrolladores numpy
niegan a ser inmovilizados. No describen, o no pueden describir con palabras qué tipos de objetos pueden o no convertirse en 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)
Para sus propias funciones, una anotación como
def foo(x: np.ndarray) -> np.ndarray:
trabajos. Por supuesto, si su función termina llamando a alguna función numpy
que pase su argumento a través de asanyarray
(como hacen muchos), dicha anotación estaría incompleta, ya que su entrada podría ser una list
, o np.matrix
, etc.