将 numpy 数组转换为十六进制字节数组
Convert numpy array to hex 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
。
在数组 a
上调用 Python 内置函数 bytes
做同样的事情,尽管 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')
我想在 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
。
在数组 a
上调用 Python 内置函数 bytes
做同样的事情,尽管 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')