Python 获取有关numpy数据类型的信息

Python 获取有关numpy数据类型的信息,python,numpy,Python,Numpy,我正在尝试对numpy类型执行有效性检查——特别是,如果np.longdouble是80位扩展精度浮点值——并获取其原始字节大小(带填充) 根据,我可以从属性中获取大量信息。但是,无论我检查哪个属性,我都会得到 In [23]: np.longdouble.nbytes Out[23]: <attribute 'nbytes' of 'numpy.generic' objects> [23]中的:np.longdouble.nbytes 出[23]: 而不是数字 我可以从np.f

我正在尝试对numpy类型执行有效性检查——特别是,如果
np.longdouble
是80位扩展精度浮点值——并获取其原始字节大小(带填充)

根据,我可以从属性中获取大量信息。但是,无论我检查哪个属性,我都会得到

In [23]: np.longdouble.nbytes
Out[23]: <attribute 'nbytes' of 'numpy.generic' objects>
[23]中的
:np.longdouble.nbytes
出[23]:
而不是数字

我可以从
np.finfo(np.longdouble)
中获得大量信息,但它不包括字节大小

当然,我可以创建一个这种类型的数组并计算大小或其他。。。但是,这对于获取不绑定到特定实例的信息真的是必要的吗?

根据,
np.dtype()。奇怪

此处(使用模块):

根据,
np.dtype()
需要实际获取属性值。奇怪

此处(使用模块):


执行实例路径:

In [1586]: np.array(1,np.longdouble)
Out[1586]: array(1.0, dtype=float96)
In [1587]: np.longdouble(1).nbytes
Out[1587]: 12

In [1588]: np.dtype(np.longdouble)
Out[1588]: dtype('float96')
默认浮点为
float64

nbytes
是实例的属性,而不是类的属性。这种区别在Python中非常常见

如果我从中创建一个
dtype
对象:

In [1592]: dt=np.dtype(np.longdouble)
In [1593]: dt
Out[1593]: dtype('float96')
In [1594]: dt.descr
Out[1594]: [('', '<f12')]
In [1595]: dt.itemsize
Out[1595]: 12
===================

finfo
np.dtype(dtype)
开头。因此,
dt.itemsize
是获取类似类型的字节大小的正确方法


因为数据类型有很多同义词,所以使用像
np.dtype
这样的“中央清算所”是有意义的。而且对编译器有一定的依赖性,因此某些属性必须在运行时派生,而不是在某些python类定义中硬编码

执行实例路径:

In [1586]: np.array(1,np.longdouble)
Out[1586]: array(1.0, dtype=float96)
In [1587]: np.longdouble(1).nbytes
Out[1587]: 12

In [1588]: np.dtype(np.longdouble)
Out[1588]: dtype('float96')
默认浮点为
float64

nbytes
是实例的属性,而不是类的属性。这种区别在Python中非常常见

如果我从中创建一个
dtype
对象:

In [1592]: dt=np.dtype(np.longdouble)
In [1593]: dt
Out[1593]: dtype('float96')
In [1594]: dt.descr
Out[1594]: [('', '<f12')]
In [1595]: dt.itemsize
Out[1595]: 12
===================

finfo
np.dtype(dtype)
开头。因此,
dt.itemsize
是获取类似类型的字节大小的正确方法


因为数据类型有很多同义词,所以使用像
np.dtype
这样的“中央清算所”是有意义的。而且对编译器有一定的依赖性,因此某些属性必须在运行时派生,而不是在某些python类定义中硬编码

这有帮助吗这有帮助吗你正在运行哪个版本?操作系统?我在win32上的Linux 3.5+@hpaulj 2.7上获得的itemsize为12。输出只是一个例子——我不想在各种平台上用所有可能的输出来混乱答案。我为此加了一条注释。毕竟,问题在于只获取值,而不是验证
np.longdouble
为80位的所有方面。您正在运行哪个版本?操作系统?我在win32上的Linux 3.5+@hpaulj 2.7上获得的itemsize为12。输出只是一个例子——我不想在各种平台上用所有可能的输出来混乱答案。我为此加了一条注释。毕竟,问题是只获取值,而不是验证
np的所有方面。longdouble
作为80位。注意:
typeDict
没有文档记录。
github
搜索没有显示任何文档引用。但是它是在
numpy/numpy/core/numerictypes.py中创建的。注意:
typeDict
没有文档记录。
github
搜索不会显示任何文档引用。但它是在
numpy/numpy/core/numictypes.py
In [1600]: np.typeDict['longdouble']
Out[1600]: numpy.float96