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

MRo*_*lin 4 python numpy

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

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

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

numpy在内部使用什么?

jte*_*ace 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
Run Code Online (Sandbox Code Playgroud)

  • 看起来比 a.dtype.name 中的“int”更好 (2认同)

JAB*_*JAB 5

最简单的方法是每次创建一个新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)
Run Code Online (Sandbox Code Playgroud)