English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Учебник 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 и т.д.
Объект типа данных используется для описания того, как использовать область памяти, соответствующую массиву, и зависит от следующих аспектов:
Тип данных - Например, целое число, плавающая точка, комплексное число, логическое значение, строка или объект 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.]
Можно также использовать тип данных 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 |
m | timedelta (интервал времени) |
M | datetime (дата и время) |
O | (Python) объект |
S, a | (byte-)строка |
U | Unicode |
V | Исходные данные (void) |