English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Типы данных NumPy

Учебник Numpy

Объяснение типов данных NumPy и примеры

типы данных, т.е. dtype, также являются специальными объектами, которые содержат информацию о блоке памяти, необходимом для определенного типа данных ndarray (они также известны как метаданные, т.е. данные о данных). dtype является причиной, по которой NumPy может легко взаимодействовать с другими системами данных. Обычно другие системы предоставляют硬盘 или память и соответствующие данные, что упрощает чтение и запись данных с использованием языков низкого уровня, таких как C или Fortran. внутренние типы данных Pythonмного больше,基本上 можно соотнести с типами данных C, некоторые из которых соответствуют内置ым типам Python. В таблице приведены часто используемые базовые типы NumPy.

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

Если вы не можете запомнить эти dtype NumPy, это не проблема, особенно для начинающих. Обычно вам нужно знать только приблизительный тип данных, с которыми вы работаете, это плавающая точка, комплексное число, целое число, логическое значение, строка или обычный объект Python. Когда вам нужно контролировать способ хранения данных в памяти и на диске (особенно для больших наборов данных), вам нужно знать, как контролировать тип хранения.

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

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

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

Тип данных - Например, целое число, плавающая точка, комплексное число, логическое значение, строка или объект Python.Размер данных - Например, сколько байт используется для хранения целого числа.Байт-орядок данных - Малый или большой порядок

Байт-орядок определяется предварительным установлением "<" или ">" для типа данных. "<" означает малый порядок (наименьшее значение хранится в наименьшем адресе, то есть低位 группируются спереди). ">" означает большой порядок (наиболее важные байты хранятся в наименьшем адресе, то есть высокий порядок группируются спереди).

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

 numpy.dtype(object, align, copy)

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

Пример

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

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

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

>>> import numpy as np
>>> a = np.dtype([('number',np.int16)])  # Тип данных применяется к объекту ndarray 
>>> print(a)
[('number', '<i2')]
>>> arr = np.array([(1,),(2,),(3,)], dtype = a)
>>> print(arr)
[(1,) (2,) (3,)]
>>> print(arr['number'])  # Название поля типа можно использовать для доступа к реальному столбцу number
[1 2 3]

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

>>> import numpy as np
>>> animal = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
>>> print(animal)
[('name', 'S20'), ('age', 'i1'), ('marks',')
                                <f4')] 
>>> a = np.array([('cat', 5, 10),('dog', 4, 35),('lion',8,18)], dtype = animal)
>>> print(a)
[(b'cat', 5, 10.) (b'dog', 4, 35.) (b'lion', 8, 18.)]

Использование метода astype позволяет явно конвертировать тип данных массива, пример приведен ниже:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
>>> print(arr.dtype)
int64
>>> print(arr)
[1 2 3 4 5]
>>> float_arr = arr.astype('float32')  # 也可以写作 arr.astype(np.float32)
>>> print(float_arr.dtype)
float32
>>> print(float_arr)
[1. 2. 3. 4. 5.]
注意:Преобразование строкового массива чисел в числа возможно, когда числа являются плавающей точкой, можно преобразовать только в float, а не в int.

Можно также использовать тип данных dtype другого массива для преобразования типов данных, примеры см. ниже:

>>> import numpy as np
>>> int_arr = np.arange(10)
>>> calibers = np.array([.22, .270, .357], dtype=np.float64)
>>> print(calibers)
[0.22 0.27 0.357]
>>> arr_last = int_arr.astype(calibers.dtype)
>>> print(arr_last.dtype)
float64
>>> print(arr_last)
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

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

СимволТип соответствия
bБулево
i(Сигнатурное) целое
uБеззнаковое целое integer
fФлoят
cКомплексное浮пpont
mtimedelta (интервал времени)
Mdatetime (дата и время)
O(Python) объект
S, a(byte-)строка
UUnicode
VИсходные данные (void)