Избавиться от трейлинга \ x00 на bytearray - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь передать матрицу от передатчика к приемнику поочередно. Для этого я пытаюсь прочитать каждую строку матрицы, превратить ее в байтовый массив для передачи, а затем декодировать в приемнике. До сих пор, когда я превращаю каждую строку в байтовый массив, каждое число отслеживается нулевыми элементами.

a = np.random.randint(0,255,size=(20,20))
print(a)


for row in a:
    b = bytearray(row)
    print(b)

Допустим, что массив из строк был [1,2,3,4]

ожидаемый результат: bytearray(b'\x01\x02\x03\x04')

но результат I get is: bytearray(b'\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00...')

Мой получатель использует list () для декодирования сообщения, поэтому массив с [1,2,3,4] станет [1,0,0,0,2,0, 0,0,3,0,0,0,4,0,0,0] получателю.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

С документация :

dtype: dtype, необязательно

Требуемый dtype результата. Все dtypes определяются по их именам, то есть 'int64', 'int' и т. Д. c, так что метеородер недоступен, и указанная точность c может иметь различные типы C в зависимости от платформы. Значением по умолчанию является 'np.int'.

Новое в версии 1.11.0.

(dtype - это сокращение от data type и является параметром для большого число Numpy функций.)

Если не указано иное, np.random.randint дает значения np.int, которые занимают четыре байта пространства. (Неважно, что для указанного вами случайного диапазона будет достаточно одиночных байтов.)

Чтобы исправить это, укажите соответствующий dtype:

a = np.random.randint(0, 255, size=(20,20), dtype=np.uint8)
0 голосов
/ 24 апреля 2020

Похоже, что у вас есть "a" как массив целых чисел, и каждое из них на самом деле хранится в 4 байтах - потому что целые числа могут содержать гораздо большие значения, чем 255, максимальное значение, которое хранится в байте без знака , Таким образом, эти наборы из 3 нулей между каждым из значений, которые вас интересуют, являются «остатком целого числа».

Не могу вспомнить, если np.random предоставляет способ инициализировать его как массив байтов. Или у вас может быть промежуточный шаг, когда вы копируете каждый 4-й байт из вашей «строки» в новый байтовый массив «c» перед его передачей.

В любом случае, надеюсь, что, по крайней мере, вы укажете правильное направление.

...