将numpy数组转换为十六进制字节阵列
问题描述:
我想在Python 2.7中将numpy数组转换为一个字节串。比方说我numpy的阵列a
是一个简单的2x2
阵列,看起来像这样:将numpy数组转换为十六进制字节阵列
[[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
作为一个侧点,也可以利用解释的view
阵列NumPy的的基本存储器中作为字节。举例来说,如果a
仍然是int64
类型:
>>> a.view('S8')
array([[b'\x01', b'\n'],
[b'\x10', b'\xff']], dtype='|S8')
就有人看到的是,在未来的:“tobyte()”也可以是“的ToString()”在一些numpy的版本,而且“字节(一) '对我不起作用。 – Dschoni