我无法在numpy中找到一种简单的方法来显示一个矩阵,其中一列显示为十六进制,其余为十进制。 找到关于how to print everything as hex的答案,但我只想要一栏。
这就是我所拥有的:数据看起来像这样:
array([[120258560, 3],
[167772160, 339],
[118948100, 1],
[ 50331904, 1]])
第一列是错误代码,第二列是它出现的次数。错误代码很容易以十六进制读取,它出现的次数很容易以十进制读取。 我希望能够做到这一点:
array([['0X72B0000', 3],
['0xa000000', 339],
['0X7170104', 1],
['0X3000100', 1]])
提示? (:
我目前的解决方案是围绕这个的包装,它有效但很难看:
hex_col = hex_col = np.array(([hex(x)[:-1] for x in data[:,0]]))
err_in_hex = np.transpose([hex_col, data[:,1]])
err_in_hex
看起来像:
array([['0x72b0000', '3'],
['0xa000000', '339'],
['0x7170104', '1'],
['0x3000100', '1']],
dtype='|S9')
答案 0 :(得分:1)
出于显示目的,只需迭代行,并根据需要格式化每一行:
In [303]: for row in data:
...: print hex(row[0])[:-1], row[1]
...:
0x72b0000 3
0xa000000 339
0x7170104 1
0x3000100 1
或更多格式:
In [307]: print '\n'.join(['%10s %10d'%(hex(row[0])[:-1], row[1]) for row in data])
0x72b0000 3
0xa000000 339
0x7170104 1
0x3000100 1
常规数组格式化执行tolist()
之类的操作,然后将格式控件应用于此。因此,您可以通过逐行格式化来减少任何损失。
如果要将十六进制字符串和数字(非字符串)数据收集到一个数组中,则需要一个复合dtype,一个结构化数组。你可以这样做:
In [317]: hex_col = [hex(x)[:-1] for x in data[:,0]]
In [318]: data1=np.zeros(data.shape[0],dtype='S10,int')
In [319]: data1['f0']=hex_col
In [320]: data1['f1']=data[:,1]
In [321]: data1
Out[321]:
array([('0x72b0000', 3), ('0xa000000', 339), ('0x7170104', 1),
('0x3000100', 1)],
dtype=[('f0', 'S10'), ('f1', '<i4')])