许多numpy函数将dtype参数作为字符串(如"float64"
)或numpy数据类型(如numpy.float64
)或甚至python数据类型(如float
)。
我需要比较两种数据类型,并希望支持这种灵活的接口。是否存在所有这些形式都相同的功能?即我想要最小函数f
,以便
f("float64") == f(numpy.float64) == f(float)
numpy在内部使用什么?
答案 0 :(得分:6)
您应该阅读numpy文档的Scalars页面,其中描述了数据类型层次结构。
为了比较dtypes本身,您可以使用np.issubdtype。一些例子:
>>> import numpy as np
>>> np.issubdtype(np.int32, int)
True
>>> np.issubdtype(np.int32, float)
False
>>> np.issubdtype(float, np.floating)
True
>>> np.issubdtype(float, np.inexact)
True
>>> np.issubdtype(np.float32, float)
True
>>> np.issubdtype(np.float32, int)
False
>>> np.issubdtype(np.float32, np.floating)
True
答案 1 :(得分:3)
最简单的方法是每次都创建一个新的numpy.dtype
对象,因为它已经内置了所有必要的类型规范化/标准化和相等检查。实际上,我还没有看看内幕,所以它可能实际上没有为dtype
已经拥有的numpy
创建一个新实例(比如使用numpy.array
}并不总是创建一个新的数组),效率很高。
numpy.float64 == numpy.dtype('float64') == numpy.dtype(numpy.float64) == numpy.dtype(float)
numpy.int32 == numpy.dtype('int32') == numpy.dtype(numpy.int32) == numpy.dtype(int)