【问题标题】:Convert numpy array to hex bytearray将numpy数组转换为十六进制字节数组
【发布时间】:2016-01-13 04:30:41
【问题描述】:

我想在 python 2.7 中将一个 numpy 数组转换为一个字节串。假设我的 numpy 数组 a 是一个简单的 2x2 数组,如下所示:

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

我的问题是,如何将此数组转换为字节字符串或字节数组,输出如下:

\x01\x0A\x10\xff

或同样好:

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

【问题讨论】:

    标签: python arrays numpy hex bytearray


    【解决方案1】:

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

    【讨论】:

    • 只是为了将来有人看到:'tobyte()' 在某些 numpy 版本中也可能是 'tostring()',而且 'bytes(a)' 对我不起作用。
    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2021-10-31
    相关资源
    最近更新 更多