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

时间:2015-10-14 21:56:15

标签: python arrays numpy hex bytearray

我想将一个numpy数组转换为python 2.7中的bytestring。让我们说我的numpy数组2x2是一个简单的[[1,10], [16,255]] 数组,如下所示:

\x01\x0A\x10\xff

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

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

或同样好:

400 Bad Request

Pragma: no-cache
X-CorrelationId: 823fc2fd-4ed2-46b6-86e0-50b2abf5d61b
X-Content-Type-Options: nosniff
Request-Processing-Time: 606.4377 ms
OData-Version: 4.0
Content-Length: 142
Cache-Control: no-cache
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true
Date: Wed, 14 Oct 2015 21:39:58 GMT
Expires: -1
P3P: CP="CAO DSP COR ADMa DEV CONi TELi CUR PSA PSD TAI IVDi OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR"
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

{
  "error":{
    "code":"20112","message":"Invalid Entity ID specified.",
  }
}

1 个答案:

答案 0 :(得分:3)

假设anp.int8类型的数组,您可以使用tobytes()来获取您指定的输出:

>>> a.tobytes()
b'\x01\n\x10\xff'

请注意,我的终端会将\x0A打印为换行符\n

在数组bytes上调用内置函数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')