numpy .dtype против numpy .ndarray.dtype - PullRequest
       30

numpy .dtype против numpy .ndarray.dtype

0 голосов
/ 30 апреля 2020

У меня есть простая проблема с использованием 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

Почему я получаю два разных результата?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Как упомянуто @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 при его создании.

output:

a: int16
b.dtype: float64
c.dype: int16
0 голосов
/ 30 апреля 2020

numpy.dtype() является конструктором для создания объекта типа данных, тогда как к типу numpy array var можно получить доступ через var.dtype

Более подробную информацию вы можете найти в numpy руководство или просмотр строки документации:

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

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

Создание объекта типа данных.

Массив numpy является однородным и содержит элементы, описываемые объектом dtype. Объект dtype может быть построен из различных комбинаций фундаментальных чисел c типов. [...]

...