numpy.frombuffer()
Функция numpy.frombuffer() интерпретирует буфер байтов как одномерный массив NumPy. Не копирует данные — возвращаемый массив разделяет память с исходным буфером. Удобно для разбора бинарных данных, пришедших по UART/Serial.
Сигнатура
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0, *, like=None)
Параметры
buffer— объект, поддерживающий буфер-протокол (bytes,bytearray,memoryview).dtype— тип элементов (по умолчаниюfloat64).count— число элементов для чтения;-1— до конца буфера.offset— смещение в байтах от начала буфера.
Возвращаемое значение
ndarray — одномерный массив указанного типа, разделяющий память с буфером. Из bytes (неизменяемый) полученный массив тоже только для чтения.
Примеры
Пример 1. Из строки байтов uint8.
import numpy as np
buf = b'\x01\x02\x03\x04\x05'
arr = np.frombuffer(buf, dtype=np.uint8)
print(arr)
[1 2 3 4 5]
Пример 2. Чтение int16 (little-endian).
buf = b'\x01\x00\x02\x00\xff\xff'
arr = np.frombuffer(buf, dtype='<i2')
print(arr)
[ 1 2 -1]
Пример 3. Смещение и count.
buf = b'\x00\x00\x0A\x14\x1E'
arr = np.frombuffer(buf, dtype=np.uint8, count=3, offset=2)
print(arr)
[10 20 30]
Пример 4. Парсинг пакета с Arduino.
# Допустим, Arduino отправил 4 двухбайтовых значения АЦП (uint16, LE)
packet = bytes([0x00, 0x02, 0x00, 0x03, 0xFF, 0x03, 0x80, 0x01])
adc = np.frombuffer(packet, dtype='<u2')
print("Каналы АЦП:", adc)
Каналы АЦП: [ 512 768 1023 384]
Пример 5. bytearray — изменяемый источник.
buf = bytearray([10, 20, 30, 40])
arr = np.frombuffer(buf, dtype=np.uint8)
buf[0] = 99
print("Массив видит изменение:", arr)
Массив видит изменение: [99 20 30 40]
См. также
Примечание
Лицензия и источники
Техническое описание функции адаптировано из официальной документации NumPy (https://numpy.org/doc/stable/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.