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.