将numpy数据类型与字符串进行比较

时间:2012-06-04 19:36:33

标签: python numpy

许多numpy函数将dtype参数作为字符串(如"float64")或numpy数据类型(如numpy.float64)或甚至python数据类型(如float)。

我需要比较两种数据类型,并希望支持这种灵活的接口。是否存在所有这些形式都相同的功能?即我想要最小函数f,以便

f("float64") == f(numpy.float64) == f(float)

numpy在内部使用什么?

2 个答案:

答案 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)