numpy.dtype vs numpy.ndarray.dtype

问题描述 投票:0回答:1

我有一个简单的问题,使用 np.dtype在下面的代码中演示。

In [1]: import numpy as np                                                                                                                                                                                         

In [2]: var = np.arange(5, dtype=np.int32)                                                                                                                                                                         

In [3]: print(var)                                                                                                                                                                                                 
[0 1 2 3 4]

In [4]: print(var.dtype)                                                                                                                                                                                           
int32

In [5]: print(np.dtype(var))                                                                                                                                                                                       
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-03f3349b4160> in <module>
----> 1 print(np.dtype(var))

TypeError: data type not understood

为什么我得到两个不同的结果?

python numpy numpy-ndarray
1个回答
0
投票

正如 @yatu 在评论中提到的。numpy.dtype 不会返回一个数组的数据类型。它只创建dtype对象。另一方面。ndarray.dtype 返回和数组数据类型。为了更好地理解这一点,下面是一个示例代码。

a = np.dtype(np.int16)
b = np.array([1., 2., 3.])
c = np.array([1., 2., 3.], a)

注意dtype对象 a 传给数组 c 当它被创建时。

输出。

a: int16
b.dtype: float64
c.dype: int16

0
投票

numpy.dtype() 是创建数据类型对象的构造函数,而numpy数组的类型为 var 可以通过 var.dtype

更多信息请见 numpy手册 或查看docstring。

numpy.dtype(self, , *args, **kwargs)

Docstring: dtype(obj, align=False, copy=False)

创建一个数据类型对象。

numpy数组是同质的,并且包含由dtype对象描述的元素。一个dtype对象可以由不同的基本数字类型组合来构建。 [...]

© www.soinside.com 2019 - 2024. All rights reserved.