2012-06-04 63 views
4

许多numpy函数都将dtype参数作为字符串(如"float64")或numpy数据类型(如numpy.float64)或者甚至是python数据类型(如float)。将numpy数据类型与字符串进行比较

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

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

是什么numpy的内部使用?

回答

6

您应该阅读描述数据类型层次结构的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 
+0

啊,我没有想到子类型比较。尼斯。 – JAB

+0

看起来比a.dtype.name中的'int'更可取 – beardc

3

最简单的方法是每次创建一个新的numpy.dtype对象,因为它具有所有必需的类型规范化/标准化和已经内置的等式检查。实际上,我没有看过内部,因此它可能不会为numpy已有的(如使用numpy.array并不总是创建新阵列)创建新实例dtype,这将非常有效。

numpy.float64 == numpy.dtype('float64') == numpy.dtype(numpy.float64) == numpy.dtype(float) 
numpy.int32 == numpy.dtype('int32') == numpy.dtype(numpy.int32) == numpy.dtype(int) 
相关问题