7

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

我需要比较两种数据类型并希望支持这种灵活的接口。有没有一种功能在所有这些形式下都是等价的?即我想要最小的功能f,这样

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

numpy 在内部使用什么?

4

2 回答 2

11

您应该阅读 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
于 2012-06-04T19:47:59.100 回答
4

最简单的方法是numpy.dtype每次都创建一个新对象,因为它已经内置了所有必要的类型规范化/标准化和相等检查。实际上,我还没有看内部结构,所以它是可能的它实际上并没有dtypenumpy已经拥有的实例创建一个新实例(例如 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)
于 2012-06-04T19:42:01.410 回答