Escriba insinuación / anotación (PEP 484) para numpy.ndarray


Tiene alguien implementado sugerencias de tipo para el numpy específico.¿clase ndarray?

Ahora mismo, estoy usando escribiendo.Cualquier, pero sería bueno tener algo más específico.

Por ejemplo, si la gente numpy agregó un type alias para su clase de objeto array_like. Mejor aún, implementar soporte en el nivel dtype, para que se soporten otros objetos, así como ufunc.

Author: Inon, 2016-02-27

3 answers

Parece que el módulo typing fue desarrollado en:

Https://github.com/python/typing

El repositorio principal numpy está en

Https://github.com/numpy/numpy

Los errores de Python y las confirmaciones se pueden rastrear en

Http://bugs.python.org/

La forma habitual de agregar una característica es bifurcar el repositorio principal, desarrollar la característica hasta que sea a prueba de bombas, y luego enviar una solicitud de extracción. Obviamente en varios puntos en el proceso desea comentarios de otros desarrolladores. Si no puedes hacer el desarrollo tú mismo, entonces tienes que convencer a alguien más de que es un proyecto que vale la pena.

cython tiene una forma de anotaciones, que utiliza para generar código C eficiente.


Usted hizo referencia al párrafo array-like en la documentación numpy. Nótese su typing información:

Una forma sencilla de averiguar si el objeto se puede convertir a una matriz numpy usando array() es simplemente intentar interactivamente y ver si funciona! (The Python Way).

En otras palabras, los desarrolladores de numpy se niegan a ser inmovilizados. Ellos no, o no pueden, describir en palabras qué tipos de objetos pueden o no ser convertidos a 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:

Funciona. Por supuesto, si su función termina llamando a alguna función numpy que pasa su argumento a través de asanyarray (como muchos lo hacen), tal anotación sería incompleta, ya que su la entrada podría ser list, o np.matrix, etc.

 13
Author: hpaulj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 01:07:22

Echa un vistazo a DataShape. Utiliza los tipos de datos, así como una sintaxis de cuán grandes deben ser las matrices de entrada y salida.

 4
Author: Back2Basics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-27 23:28:49

Lo que hice fue simplemente definirlo como

Dict [Tupla [int, int], TYPE]

Así que, por ejemplo, si desea una matriz de flotadores, puede hacer:

a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]

Esto, por supuesto, no es exacto desde la perspectiva de la documentación, pero para analizar el uso correcto y obtener una finalización adecuada con PyCharm funciona muy bien!

 3
Author: Leon Vayman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-18 19:39:52