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)
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这样做,如果速度是一个问题,这将是一个更好的选择.
如果您正在寻找的内容只是为了显示,您可以执行以下操作:
>>> 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)
只要投入我的两分钱,如果它总是像这样的二维数组,就可以使用列表推导来完成
a = [[1,2],[3,4]]
print [map(hex, l) for l in a]
Run Code Online (Sandbox Code Playgroud)
这给你 [['0x1', '0x2'], ['0x3', '0x4']]