numpy multidimensional-array python-3.5 strong-typing type-hinting

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

http://bugs.python.org/

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.