将整数数组打印为十六进制数

ade*_*sif 18 python arrays numpy

我有一个使用创建的数组

array1 = np.array([[25,  160,   154, 233],
                   [61, 244,  198,  248],
                   [227, 226, 141, 72 ],
                   [190, 43,  42, 8]],np.int) ;
Run Code Online (Sandbox Code Playgroud)

显示为

[[25,  160, 154, 233]
 [61,  244, 198, 248]
 [227, 226, 141,  72]
 [190,  43,  42 ,  8]]
Run Code Online (Sandbox Code Playgroud)

如何将此数组显示为十六进制数字,如下所示:

[[0x04,  0xe0,  0x48, 0x28]
 [0x66,  0xcb,  0xf8, 0x06]
 [0x81,  0x19,  0xd3, 0x26]
 [0xe5,  0x9a,  0x7a, 0x4c]]
Run Code Online (Sandbox Code Playgroud)

注意:十六进制中的数字可能不是int中数字的真实转换.我已经填充十六进制数组只是为了举例说明我需要的东西.

Jus*_*eel 27

您可以设置numpy的打印选项来执行此操作.

import numpy as np
np.set_printoptions(formatter={'int':hex})
np.array([1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)

array([0x1L, 0x2L, 0x3L, 0x4L, 0x5L])
Run Code Online (Sandbox Code Playgroud)

最后的L只是因为我在64位平台上,它正在向格式化程序发送长信息.要解决此问题,您可以使用

np.set_printoptions(formatter={'int':lambda x:hex(int(x))})
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样不希望在全局范围内更改打印选项的人,有一个 [numpy.printoptions](https://numpy.org/doc/stable/reference/ generated/numpy.printoptions.html) 帮助器现在,您可以使用以下方法:`with np.printoptions(formatter={'int':hex}):` (3认同)

str*_*cat 14

Python有一个内置的十六进制函数,用于将整数转换为十六进制表示(字符串).您可以使用numpy.vectorize将其应用于多维数组的元素.

>>> import numpy as np
>>> A = np.array([[1,2],[3,4]])
>>> vhex = np.vectorize(hex)
>>> vhex(A)
array([['0x1', '0x2'],
       ['0x3', '0x4']], 
      dtype='<U8')
Run Code Online (Sandbox Code Playgroud)

可能有一个内置的方法,用numpy这样做,如果速度是一个问题,这将是一个更好的选择.

  • 当只偶尔需要一个十六进制字符串时,vectorize 很方便。否则需要 original=get_printoptions(), set_printoptions(hex), print hex, set_printoptions(original) (3认同)

El *_*rto 6

如果您正在寻找的内容只是为了显示,您可以执行以下操作:

>>> a = [6, 234, 8, 9, 10, 1234, 555, 98]
>>> print '\n'.join([hex(i) for i in a])
0x6
0xea
0x8
0x9
0xa
0x4d2
0x22b
0x62
Run Code Online (Sandbox Code Playgroud)


ame*_*eer 5

只要投入我的两分钱,如果它总是像这样的二维数组,就可以使用列表推导来完成

a = [[1,2],[3,4]]
print [map(hex, l) for l in a]
Run Code Online (Sandbox Code Playgroud)

这给你 [['0x1', '0x2'], ['0x3', '0x4']]