Типы данных NumPy

NumPy поддерживает гораздо больше типов данных, чем встроенные типы Python, и они в основном соответствуют типам данных языка C, причём некоторые из них соответствуют встроенным типам Python. В следующей таблице перечислены часто используемые базовые типы NumPy.

Name Описание
bool_ Логический тип данных (True или False)
int_ Целочисленный тип по умолчанию (аналогичен long в C, int32 или int64)
intc То же, что тип int в C, обычно int32 или int64
intp Целочисленный тип, используемый для индексации (аналогичен ssize_t в C, обычно всё ещё int32 или int64)
int8 Byte (-128 до 127)
int16 Целое число (от -32768 до 32767)
int32 Целое число (от -2147483648 до 2147483647)
int64 Целое число (от -9223372036854775808 до 9223372036854775807)
uint8 Беззнаковое целое число (от 0 до 255)
uint16 Беззнаковое целое число (от 0 до 65535)
uint32 Беззнаковое целое число (от 0 до 4294967295)
uint64 Беззнаковое целое число (от 0 до 18446744073709551615)
float_ Сокращение для типа float64
float16 Число с плавающей запятой половинной точности, включая: 1 бит знака, 5 бит экспоненты, 10 бит мантиссы
float32 Число с плавающей запятой одинарной точности, включая: 1 бит знака, 8 бит экспоненты, 23 бита мантиссы
float64 Число с плавающей запятой двойной точности, включая: 1 бит знака, 11 бит экспоненты, 52 бита мантиссы
complex_ Сокращение для типа complex128, т. е. 128-битное комплексное число
complex64 Комплексное число, представленное двумя 32-битными числами с плавающей запятой (действительная и мнимая части)
complex128 Комплексное число, представленное двумя 64-битными числами с плавающей запятой (действительная и мнимая части)

Числовые типы NumPy на самом деле являются экземплярами объектов dtype, каждый из которых соответствует уникальному символу, включая np.bool_, np.int32, np.float32 и т. д.


Объект типа данных (dtype)

Объекты типов данных (экземпляры класса numpy.dtype) используются для описания того, как используется область памяти, соответствующая массиву. Они описывают следующие аспекты данных:

  • Тип данных (целочисленный, с плавающей запятой или объект Python)
  • Размер данных (например, сколько байтов целое число занимает при хранении)
  • Порядок байтов данных (little-endian или big-endian)
  • В случае структурированных типов — имена полей, тип данных каждого поля и часть блока памяти, занимаемая каждым полем
  • Если тип данных является подмассивом, то каковы его форма и тип данных.

Порядок байтов определяется предварительной настройкой типа данных<или>, чтобы выбрать.<Означает little-endian (наименее значимый байт хранится по наименьшему адресу, т. е. младшая группа байтов размещается первой).>Означает big-endian (наиболее значимый байт хранится по наименьшему адресу, т. е. старшая группа байтов размещается первой).

Объекты dtype создаются с использованием следующего синтаксиса:

numpy.dtype(object, align, copy)
  • object — объект типа данных, в который выполняется преобразование
  • align — если true, дополнить поля отступами, чтобы сделать его похожим на C-структуру.
  • copy — копировать объект dtype; если false, это ссылка на встроенный объект типа данных.

Примеры

Далее мы можем понять это на примерах.

Пример 1

import numpy as np # Использование скалярных типов dt = np.dtype(np.int32) print(dt)

Результат вывода:

int32

Пример 2

import numpy as np # Четыре типа данных int8, int16, int32, int64 можно заменить строками 'i1', 'i2', 'i4', 'i8' dt = np.dtype('i4') print(dt)

Результат вывода:

int32

Пример 3

import numpy as np # Аннотация порядка байтов dt = np.dtype('<i4') print(dt)

Результат вывода:

int32

В следующем примере демонстрируется использование структурированных типов данных; будут созданы поля типа и соответствующие фактические типы.

Пример 4

# Сначала создайте структурированный тип данных import numpy as np dt = np.dtype([('age',np.int8)]) print(dt)

Результат вывода:

[('age', 'i1')]

Пример 5

# Примените тип данных к объекту ndarray import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a)

Результат вывода:

[(10,) (20,) (30,)]

Пример 6

# Имя поля типа можно использовать для доступа к фактическому столбцу age import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age'])

Результат вывода:

[10 20 30]

Следующий пример определяет структурированный тип данных student, содержащий строковое поле name, целочисленное поле age и поле marks с плавающей точкой, и применяет этот dtype к объекту ndarray.

Пример 7

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print(student)

Результат вывода:

[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]

Пример 8

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print(a)

Результат вывода:

[(b'abc', 21, 50.) (b'xyz', 18, 75.)]

Каждый встроенный тип имеет уникальный символьный код, который его определяет, следующим образом:

Символ Соответствующий тип
bBoolean
i(Знаковое) целое число
u Беззнаковое целое
fЧисло с плавающей запятой
c Комплексное число с плавающей запятой
m timedelta (интервал времени)
M datetime (дата и время)
O (Python) объект
S, a (байтовая) строка
U Юникод
V Необработанные данные (void)
Другие расширения