如何检查numpy dtype是否是完整的?

时间:2014-03-18 06:12:32

标签: python numpy integral abc

如何检查numpy dtype是否为完整?我试过了:

issubclass(np.int64, numbers.Integral)

但它提供了False


更新:它现在提供True

7 个答案:

答案 0 :(得分:42)

Numpy具有类似于类层次结构的dtypes层次结构(标量类型实际上具有反映dtype层次结构的真正的类层次结构)。您可以使用np.issubdtype(some_dtype, np.integer)来测试dtype是否为整数dtype。请注意,与大多数消耗dtype的函数一样,np.issubdtype()会将其参数转换为dtypes,因此可以使用任何可以通过np.dtype()构造函数生成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版本中,我们将确保标量类型已在相应的numbers ABCs中注册。

答案 1 :(得分:14)

请注意,np.int64不是dtype,它是Python类型。如果你有一个实际的dtype(通过数组的dtype字段访问),你可以使用你发现的np.typecodes字典:

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

如果您只有np.int64这样的类型,则可以先获取与该类型对应的dtype,然后按上述方式查询:

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

答案 2 :(得分:3)

建立以前的答案和评论,我已经决定使用type对象的dtype属性和Python的内置issubclass()方法以及numbers模块:

import numbers
import numpy

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

答案 3 :(得分:0)

你的意思是第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

答案 4 :(得分:0)

根据用例情况进行分类

import operator
int = operator.index(number)
在我看来,

是一个很好的方法。此外,它不需要特定的numpy。

唯一的缺点是,在某些情况下,您必须try / except

答案 5 :(得分:0)

自从提出此问题以来,NumPy已向numbers添加了适当的注册,因此可行:

issubclass(np.int64, numbers.Integral)
issubclass(np.int64, numbers.Real)
issubclass(np.int64, numbers.Complex)

这比深入了解更深奥的NumPy界面更为优雅。

要对dtype实例执行此检查,请使用其.type属性:

issubclass(array.dtype.type, numbers.Integral)
issubclass(array.dtype.type, numbers.Real)
issubclass(array.dtype.type, numbers.Complex)

答案 6 :(得分:-1)

这不是一个很好的答案,但检查类some_dtype是否为整数dtype(例如np.int32)的一种方法是调用它并将其强制转换为字符串:

str(dtype()) == '0'

浮点dtypes代替0.0