将numpy数组转换为十六进制bytearray

发布于 2021-01-29 16:44:13

我想在python 2.7中将numpy数组转换为字节串。可以说我的numpy数组a是一个简单的2x2数组,看起来像这样:

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

我的问题是,如何将此数组转换为字节字符串或字节数组,输出看起来像这样:

\x01\x0A\x10\xff

或同样好:

bytearray(b'\x01\x0A\x10\xff')
关注者
0
被浏览
173
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    假设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')
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看