numpy - 打印*矩阵中只有一个*列为十六进制

时间:2016-04-13 13:22:26

标签: python numpy matrix hex

我无法在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')

1 个答案:

答案 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')])