Python 将numpy数组转换为十六进制字节数组

Python 将numpy数组转换为十六进制字节数组,python,arrays,numpy,hex,bytearray,Python,Arrays,Numpy,Hex,Bytearray,我想在Python2.7中将numpy数组转换为bytestring。假设我的numpy数组a是一个简单的2x2数组,如下所示: [[1,10], [16,255]] 我的问题是,如何将此数组转换为字节字符串或字节数组,其输出如下所示: \x01\x0A\x10\xff 或者同样好: bytearray(b'\x01\x0A\x10\xff') 假设a是np.int8类型的数组,您可以使用来获取指定的输出: >>> a.tobytes() b'\x01\n\x10\xf

我想在Python2.7中将numpy数组转换为bytestring。假设我的numpy数组
a
是一个简单的
2x2
数组,如下所示:

[[1,10],
 [16,255]]
我的问题是,如何将此数组转换为字节字符串或字节数组,其输出如下所示:

\x01\x0A\x10\xff
或者同样好:

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

假设
a
np.int8
类型的数组,您可以使用来获取指定的输出:

>>> a.tobytes()
b'\x01\n\x10\xff'
请注意,我的终端将
\x0A
打印为换行符
\n

调用数组
a
上的Python内置函数
bytes
也可以做同样的事情,不过
tobytes()
允许您指定内存布局(根据文档)

如果
a
的类型对每个数字使用更多字节,则字节字符串中可能会填充大量不需要的空字节。您可以强制转换为较小的类型,也可以使用切片(或类似)。例如,如果
a
的类型为
int64

>>> a.tobytes()[::8]
b'\x01\n\x10\xff
作为补充,您还可以使用
视图
将NumPy数组的底层内存解释为字节。例如,如果
a
仍然是
int64
类型:

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

对于将来看到这种情况的人来说,在一些numpy版本中,“tobyte()”也可能是“tostring()”,而且“bytes(a)”对我不起作用。