Функция frombuffer
Функция frombuffer создает массив NumPy
из буфера (например, из байтовой строки или
другого объекта, поддерживающего протокол буфера).
Первым параметром функция принимает буфер,
вторым - тип данных элементов.
Третьим параметром можно задать количество элементов,
а четвертым - смещение (offset) для начала чтения данных.
Синтаксис
np.frombuffer(buffer, dtype, count, offset)
Пример
Давайте создадим байтовую строку и преобразуем её в массив
целых чисел int32:
import numpy as np
buf = b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'
arr = np.frombuffer(buf, dtype=np.int32)
print(arr)
Результат выполнения кода:
[1 2 3]
Пример
Давайте используем параметр count для чтения только
первых двух элементов из буфера:
import numpy as np
buf = b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'
arr = np.frombuffer(buf, dtype=np.int32, count=2)
print(arr)
Результат выполнения кода:
[1 2]
Пример
Давайте используем параметр offset для пропуска первых
четырех байт и чтения данных со смещения:
import numpy as np
buf = b'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00'
arr = np.frombuffer(buf, dtype=np.int32, offset=4)
print(arr)
Результат выполнения кода:
[1 2]
Пример
Давайте создадим массив из буфера с типом данных float32:
import numpy as np
buf = b'\x00\x00\x80\x3f\x00\x00\x00\x40\x00\x00\x40\x40'
arr = np.frombuffer(buf, dtype=np.float32)
print(arr)
Результат выполнения кода:
[1. 2. 3.]
Пример
Давайте создадим изменяемый массив из буфера:
import numpy as np
buf = bytearray(b'\x01\x00\x00\x00\x02\x00\x00\x00')
arr = np.frombuffer(buf, dtype=np.int32)
arr[0] = 5
print(arr)
print(buf)
Результат выполнения кода:
[5 2]
bytearray(b'\x05\x00\x00\x00\x02\x00\x00\x00')
Важно: если буфер доступен только для чтения (bytes),
то массив также будет доступен только для чтения.
Смотрите также
-
функцию
fromstring,
которая создает массив из строки с данными -
функцию
fromiter,
которая создает массив из итератора -
функцию
asarray,
которая преобразует вход в массив без лишнего копирования -
функцию
array,
которая создает массив из списка или кортежа