Я хочу использовать массивы NumPy для эффективной работы с большими байтовыми массивами. К сожалению, присвоение объекта bytes
срезу массива NumPy не работает так, как я ожидал:
import struct
import numpy as np
array = np.zeros(10, dtype=np.uint8)
# Store 65535 into the first two bytes
array[0:2] = struct.pack('<H', 65535) # does not work
print(array)
Это приводит к следующему исключению:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
В этом примере объект bytes
является результатом вызова struct.pack
. При переносе результата в bytearray
все работает так, как задумано, но я думаю, что при этом будет выполняться ненужная операция копирования (а это не то, что мне нужно):
array[0:2] = bytearray(struct.pack('<H', 65535)) # works
Почему объект bytes
здесь не работает? Тот факт, что bytearray
является изменяемым, тогда как bytes
не является изменением, здесь не должен иметь значения.
Я использую NumPy версии 1.16.4.