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

8
许多numpy函数都会采用dtype参数,可以是字符串(例如"float64")、numpy数据类型(例如numpy.float64)或甚至是python数据类型(例如float)。
我需要比较两个数据类型并希望支持这种灵活的接口。是否有一个函数可以在所有这些形式下都是等效的?也就是说,我想要最小化的函数f,使得: f("float64") == f(numpy.float64) == f(float) numpy内部使用了什么呢?
2个回答

13

你应该阅读numpy文档中描述数据类型层次结构的Scalars页面。

对于比较数据类型本身,你可以使用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

啊,我没有考虑到 subdtype 比较。不错。 - JAB
2
在a.dtype.name中,'int'看起来更可取。 - beardc

5
最简单的方法是每次创建一个新的numpy.dtype对象,因为它已经具备了所有必要的类型规范化和标准化以及相等性检查。实际上,我还没有看过内部结构,所以很可能它并不会为numpy已经拥有的那些dtype实例创建一个新的实例(就像使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接