How do I check if a numpy dtype is integral? How do I check if a numpy dtype is integral? python python

How do I check if a numpy dtype is integral?


Numpy has a hierarchy of dtypes similar to a class hierarchy (the scalar types actually have a bona fide class hierarchy that mirrors the dtype hierarchy). You can use np.issubdtype(some_dtype, np.integer) to test if a dtype is an integer dtype. Note that like most dtype-consuming functions, np.issubdtype() will convert its arguments to dtypes, so anything that can make a dtype via the np.dtype() constructor can be used.

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

In a future version of numpy, we will make sure that the scalar types are registered with the appropriate numbers ABCs.


Note that np.int64 is not a dtype, it's a Python type. If you have an actual dtype (accessed through the dtype field of an array), you can make use of the np.typecodes dict you discovered:

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

If you only have a type such as np.int64, you can first obtain a dtype that corresponds to the type, then query it as above:

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


Building off previous answers and comments, I have settled on using the type attribute of the dtype object with Python's builtin issubclass() method and the numbers module:

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