2016-04-13 10 views
0

ich kann einen einfachen Weg in numpy nicht finden, um eine Matrix mit einer Spalte angezeigt als hex, der Rest als Dezimalzahl anzuzeigen. Antwort gefunden in Bezug auf how to print everything as hex, aber ich möchte nur eine Spalte.numpy - Drucken * nur eine * Spalte von der Matrix als hex

hier ist, was ich habe: Daten wie folgt aussieht:

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

die erste Spalte ist ein Fehlercode, der zweite die Anzahl der Male ist es auftritt. Fehlercode ist einfach in Hex zu lesen, die Anzahl der Male ist es einfach in dezimal zu lesen. ich möchte in der Lage sein, dies zu tun:

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

-Tipps? (:


meine aktuelle Lösung ist ein Wrapper um das, was funktioniert, ist aber hässlich:

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 wie folgt aussieht:

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

Antwort

1

Zur Anzeige iterieren nur in den Zeilen und formatieren Sie jede Zeile nach Bedarf:

In [303]: for row in data: 
    ...:  print hex(row[0])[:-1], row[1] 
    ...:  
0x72b0000 3 
0xa000000 339 
0x7170104 1 
0x3000100 1 

oder mit mehr Formatierung:

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 

regelmäßige Array Formatierung etwas wie tolist() der Fall ist, und wendet dann die Format-Steuerelemente, dass. Sie verlieren also nichts, wenn Sie Ihre eigenen Zeilen für Zeilen formatieren.

Wenn Sie die hexadezimale Zeichenfolge und die numerischen Daten (nicht Zeichenfolge) in einem Array erfassen möchten, benötigen Sie einen zusammengesetzten dtype, ein strukturiertes Array. Sie könnten es wie folgt machen:

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