将numpy数组转换为十六进制bytearray
我想在python 2.7中将numpy数组转换为字节串。可以说我的numpy数组a
是一个简单的2x2
数组,看起来像这样:
[[1,10],
[16,255]]
我的问题是,如何将此数组转换为字节字符串或字节数组,输出看起来像这样:
\x01\x0A\x10\xff
或同样好:
bytearray(b'\x01\x0A\x10\xff')
-
假设
a
是一个np.int8
类型数组,则可以tobytes()
用来获取您指定的输出:>>> a.tobytes() b'\x01\n\x10\xff'
请注意,我的终端打印
\x0A
为换行符\n
。尽管允许您指定内存布局(根据文档),但
bytes
在数组上调用Python内置函数的功能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')