2015-10-14 4 views
1

Я хочу преобразовать массив numpy в bytestring в python 2.7. Допустим, мой NumPy массив a простой 2x2 массив, похожий на этот:Преобразование массива numpy в hex bytearray

[[1,10], 
[16,255]] 

Мой вопрос, как преобразовать этот массив в строку байтов или ByteArray, с выходной выглядит как:

\x01\x0A\x10\xff 

или одинаково хорошо:

bytearray(b'\x01\x0A\x10\xff') 

ответ

3

Предполагая a является массив np.int8 типа, вы можете использовать tobytes(), чтобы получить выход вы указать:

>>> a.tobytes() 
b'\x01\n\x10\xff' 

Обратите внимание, что мой терминал печатает \x0A как символ новой строки \n.

Вызов Python встроенный в функции bytes на массиве a делает то же самое, хотя tobytes() позволяет указать расположение памяти (согласно документации).

Если a имеет тип, который использует больше байтов для каждого номера, ваша строка байтов может быть дополнена множеством ненужных нулевых байтов. Вы можете наложить на меньший тип или использовать нарезку (или аналогичную). Например, если a имеет типа int64:

>>> a.tobytes()[::8] 
b'\x01\n\x10\xff 

В качестве побочной точки, можно также интерпретировать основную память массива NumPy как байты с использованием view. Например, если a еще из int64 типа:

>>> a.view('S8') 
array([[b'\x01', b'\n'], 
     [b'\x10', b'\xff']], dtype='|S8') 
+0

Просто для кого-то, видя, что в будущем: «tobyte()» также может быть «ToString()» в некоторых Numpy выпусках, кроме того, «байт (а) «не работает для меня. – Dschoni