2016-04-13 10 views
0

私はnumpyで、1つの列が16進数で表示され、残りが10進数で表示される簡単な方法を見つけることができません。 がhow to print everything as hexに関する回答を見つけましたが、ただ1つの列が必要です。numpy - 印刷*ただ1つの列から16進数として

は、ここで私が持っているものだ:データは次のようになります。

array([[120258560,   3], 
     [167772160,  339], 
     [118948100,   1], 
     [ 50331904,   1]]) 

最初の列がエラーコードで、第二は、それが発生した回数です。エラーコードは16進数で読むのが簡単ですが、発生回数は10進数で読むのが簡単です。 私はこれを行うことができるようにしたい:

array([['0X72B0000',   3], 
     ['0xa000000',  339], 
     ['0X7170104',   1], 
     ['0X3000100',   1]]) 

ヒントを? (:


私の現在のソリューションは、動作しますが、醜いです、このラッパー、次のとおりです。行だけで反復表示目的のために

array([['0x72b0000', '3'], 
     ['0xa000000', '339'], 
     ['0x7170104', '1'], 
     ['0x3000100', '1']], 
     dtype='|S9') 

答えて

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は次のようになります必要に応じて各行をフォーマットします。

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()のようなものを行い、その後、それにフォーマットコントロールを適用します。だからあなたは自分の行ごとの書式設定を行うことで何も失うことはありません。

16進数文字列と数値(文字列ではない)データを1つの配列にまとめたい場合は、複合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')]) 
関連する問題