Как проверить, является ли numpy dtype интегральным? Я пробовал:
issubclass(np.int64, numbers.Integral)
но он дает False.
Обновление: теперь он дает True.
Как проверить, является ли numpy dtype интегральным? Я пробовал:
issubclass(np.int64, numbers.Integral)
но он дает False.
Обновление: теперь он дает True.
У Numpy есть иерархия типов, похожих на иерархию классов (у скалярных типов действительно есть иерархия класса bona fide, которая отражает иерархию dtype). Вы можете использовать np.issubdtype(some_dtype, np.integer), чтобы проверить, является ли dtype целочисленным dtype. Обратите внимание, что, подобно большинству dtype-потребляющих функций, np.issubdtype() преобразует свои аргументы в dtypes, поэтому можно использовать все, что может сделать dtype с помощью конструктора 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
В будущей версии numpy мы будем следить за тем, чтобы скалярные типы регистрировались соответствующими ABC numbers.
Обратите внимание, что np.int64 не dtype, это тип Python. Если у вас есть фактический тип dtype (доступ к которому осуществляется через поле dtype массива), вы можете использовать np.typecodes вами np.typecodes:
my_array.dtype.char in np.typecodes['AllInteger']
Если у вас есть только такой тип, как np.int64, вы можете сначала получить dtype, соответствующий типу, а затем запросить его, как указано выше:
>>> np.dtype(np.int64).char in np.typecodes['AllInteger']
True
Исходя из предыдущих ответов и комментариев, я решил использовать атрибут type объекта dtype с помощью встроенного метода issubclass() Python и модуля numbers:
import numbers
import numpy
assert issubclass(numpy.dtype('int32').type, numbers.Integral)
assert not issubclass(numpy.dtype('float32').type, numbers.Integral)
Вы имеете в виду строку 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
В зависимости от варианта использования ducktyping
import operator
int = operator.index(number)
- хороший метод, на мой взгляд. Кроме того, ему не нужно ничего определенного.
Единственный недостаток заключается в том, что в некоторых случаях вам придется try/except его.
Это не очень some_dtype ответ, но один из способов проверить, является ли класс some_dtype целочисленным dtype (например, np.int32), - вызвать его и np.int32 к строке:
str(dtype()) == '0'
Вместо этого dtypes с плавающей точкой дают 0.0.