type matrices libreria float ejemplos dtype array python numpy integral abc

python - matrices - numpy dtype



¿Cómo compruebo si un dtype numpy es integral? (6)

¿Cómo compruebo si un dtype numpy es integral? Lo intenté:

issubclass(np.int64, numbers.Integral)

pero da False .

Actualización: ahora da True .


¿Te refieres a la línea 17?

In [13]: import numpy as np A=np.array([1,2,3]) In [14]: A.dtype Out[14]: dtype(''int32'') In [15]: isinstance(A, np.ndarray) #A is not an instance of int32, it is an instance of ndarray Out[15]: True In [16]: A.dtype==np.int32 #but its dtype is int32 Out[16]: True In [17]: issubclass(np.int32, int) #and int32 is a subclass of int Out[17]: True


Aprovechando las respuestas y comentarios anteriores, me decidí a usar el atributo type del objeto dtype con el método de issubclass() incorporado de Python y el módulo de numbers :

import numbers import numpy assert issubclass(numpy.dtype(''int32'').type, numbers.Integral) assert not issubclass(numpy.dtype(''float32'').type, numbers.Integral)


Dependiendo del caso de uso del patito

import operator int = operator.index(number)

Es un buen método en mi opinión. Además no necesita nada numpy específico.

La única desventaja es que en algunos casos tendrías que try / except .


Esta no es una gran respuesta, pero una forma de verificar si una clase some_dtype es un dtype integral (por ejemplo, np.int32 ) es llamándola y np.int32 en una cadena:

str(dtype()) == ''0''

Los tipos de punto flotante dan 0.0 lugar.


Numpy tiene una jerarquía de tipos de datos similar a una jerarquía de clases (los tipos escalares en realidad tienen una jerarquía de clases auténtica que refleja la jerarquía de tipos de datos). Puede usar np.issubdtype(some_dtype, np.integer) para probar si un dtype es un dtype entero. Tenga en cuenta que al igual que la mayoría de las funciones que consumen np.issubdtype() , np.issubdtype() convertirá sus argumentos en dtypes, por lo que se puede usar cualquier cosa que pueda hacer un dtype a través del constructor np.dtype() .

http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types

>>> import numpy as np >>> np.issubdtype(np.int32, np.integer) True >>> np.issubdtype(np.float32, np.integer) False >>> np.issubdtype(np.complex64, np.integer) False >>> np.issubdtype(np.uint8, np.integer) True >>> np.issubdtype(np.bool, np.integer) False >>> np.issubdtype(np.void, np.integer) False

En una versión futura de numpy, nos aseguraremos de que los tipos escalares estén registrados con los numbers apropiados ABCs.


Tenga en cuenta que np.int64 no es un dtype, es un tipo Python. Si tiene un dtype real (accedido a través del campo dtype de una matriz), puede hacer uso del np.typecodes que descubrió:

my_array.dtype.kind in np.typecodes[''AllInteger'']

Si solo tiene un tipo como np.int64 , primero puede obtener un dtype que se corresponda con el tipo, y luego consultarlo como se muestra arriba:

>>> np.dtype(np.int64).kind in np.typecodes[''AllInteger''] True