如何检查numpy dtype是否为完整?我试过了:
issubclass(np.int64, numbers.Integral)
但它提供了False
。
更新:它现在提供True
。
答案 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
。