Тип bytes
Тип данных bytes в библиотеке NumPy предназначен для хранения байтовых строк фиксированной длины. Он соответствует встроенному типу Python bytes, но с одним важным отличием: все строки в массиве должны иметь одинаковую длину. Если в массиве встречаются строки разной длины, они автоматически дополняются нулевыми байтами справа до максимальной длины. Тип bytes используется, когда необходимо работать с бинарными данными, сетевыми протоколами или при взаимодействии с низкоуровневыми системами.
Строковый литерал в Python для типа bytes записывается с префиксом b, например b'hello' или b'\x00\x01\x02'. При создании массива с элементами разных размеров, NumPy автоматически приводит их к общей длине, дополняя короткие строки нулевыми байтами.
Синтаксис
np.array(object, dtype=np.bytes_)
np.array(object, dtype='S10')
np.array(object, dtype='bytes')
Пример
Создадим одномерный массив из байтовых строк одинаковой длины:
import numpy as np
arr = np.array([b'abc', b'def', b'ghi'])
print(arr)
print(arr.dtype)
Результат выполнения кода:
[b'abc' b'def' b'ghi']
|S3
Пример
Создадим массив из байтовых строк разной длины. NumPy автоматически выровняет их под максимальную длину:
import numpy as np
arr = np.array([b'x', b'yz', b'uvw', b'abcd'])
print(arr)
print(arr.dtype)
print(arr.itemsize)
Результат выполнения кода:
[b'x' b'yz' b'uvw' b'abcd']
|S4
4
Все строки были дополнены нулевыми байтами до длины 4, поэтому размер одного элемента (itemsize) равен 4 байтам.
Пример
Явное указание типа bytes через параметр dtype при создании массива:
import numpy as np
arr = np.array(['hello', 'world', 'test'], dtype='S5')
print(arr)
print(arr.dtype)
Результат выполнения кода:
[b'hello' b'world' b'test']
|S5
Пример
Доступ к отдельным байтам в элементах массива типа bytes:
import numpy as np
arr = np.array([b'abcde', b'fghij', b'klmno'], dtype='S5')
print(arr[0])
print(arr[0][2])
Результат выполнения кода:
b'abcde'
99
При обращении к отдельному байту возвращается целое число (ASCII-код символа). В примере символ 'c' имеет код 99.
Пример
Преобразование массива типа bytes в массив типа str (строки Unicode) с помощью метода astype:
import numpy as np
bytes_arr = np.array([b'hello', b'world'], dtype='S5')
str_arr = bytes_arr.astype('U5')
print(bytes_arr)
print(str_arr)
print(str_arr.dtype)
Результат выполнения кода:
[b'hello' b'world']
['hello' 'world']
<U5
Пример
Создание двумерного массива с байтовыми строками:
import numpy as np
arr = np.array([[b'a', b'bc', b'def'], [b'g', b'hi', b'jkl']], dtype='S3')
print(arr)
print(arr.dtype)
Результат выполнения кода:
[[b'a' b'bc' b'def']
[b'g' b'hi' b'jkl']]
|S3
Смотрите также
-
тип
str,
который хранит строки Unicode фиксированной длины -
тип
void,
который предназначен для хранения произвольных бинарных данных -
тип
object,
который может хранить любые объекты Python -
тип
datetime64,
который представляет дату и время в фиксированном формате