2016-08-12 3 views
0

Ich habe eine Binärdatei, die ich gelesen habe eine Reihe von einem Datentyp enthält:Wie lese ich bestimmte Felder aus Binärdateien mit numpy?

dt_particles = np.dtype([('id', np.int64), \ 
         ('x', np.float32), \ 
         ('y', np.float32), \ 
         ('z', np.float32), \ 
         ('vx', np.float32), \ 
         ('vy', np.float32), \ 
         ('vz', np.float32)]) 

ich mit der gesamten Palette von dt_particles Elemente lesen können:

numpy.rec.fromfile(FILE_OBJ, dtype=dt_particles, shape=NUM_ELEMENTS) 

Wie lese ich nur id Feld aus der Binärdatei und andere Felder überspringen?

Antwort

0

Ich habe fromfile viel nicht verwendet, aber ich bezweifle, wenn es möglich ist, ausgewählte Felder zu lesen. Es ist eindeutig die dtype zu verwenden, um das Layout und den Abstand der Elemente zu bestimmen. Es gibt keinen Parameter wie usecols in genfromtxt, um ausgewählte Felder oder Spalten zu lesen. Und keine Möglichkeit zu sagen, lesen Sie 8 Bytes und überspringen Sie die nächsten 6 * 4 Bytes.

Lesen Sie einfach die ganze Sache und wählen Sie das gewünschte Feld. Es muss sowieso die ganze Datei lesen.

+0

Ok, meine einzige Sorge war, dass ich große Datendateien benutze und ich wollte so viel unnötige Verarbeitung überspringen, wie ich konnte. Wenn numpy sowieso die ganze Datei liest, macht das keinen großen Unterschied. – hazrmard

+0

Doing ein "lesen 8 Bytes", "suchen 24", wiederholen bis zum Ende der Datei, wird viel langsamer als das Lesen der Datei in 1028 Byte Chunks (oder größer) und die Verarbeitung dieser. Wenn Sie die Anzahl der Elemente begrenzen, muss nicht die gesamte Datei gelesen werden. aber irgendein Feld wird durch die Datei verteilt. – hpaulj

Verwandte Themen