许多 numpy 函数将 dtype 参数作为字符串(如"float64"
)或 numpy 数据类型(如numpy.float64
)甚至 python 数据类型(如float
)。
我需要比较两种数据类型并希望支持这种灵活的接口。有没有一种功能在所有这些形式下都是等价的?即我想要最小的功能f
,这样
f("float64") == f(numpy.float64) == f(float)
numpy 在内部使用什么?
您应该阅读 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
最简单的方法是numpy.dtype
每次都创建一个新对象,因为它已经内置了所有必要的类型规范化/标准化和相等检查。实际上,我还没有看内部结构,所以它是可能的它实际上并没有dtype
为numpy
已经拥有的实例创建一个新实例(例如 usingnumpy.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)