Lire un fichier binaire à l'aide de Numpy fromfile et un offset donné
J'ai un fichier binaire qui contient des enregistrements de la position d'un avion.
Chaque enregistrement ressembler à:
0x00: Time, float32
0x04: X, float32 // X axis position
0x08: Y, float32 // Y axis position
0x0C: Elevation, float32
0x10: float32*4 = Quaternion (x,y,z axis and w scalar)
0x20: Distance, float32 (unused)
Afin que chaque enregistrement est de 32 octets de long.
Je voudrais obtenir un tableau Numpy.
Au décalage de 1859, il y a un unsigned int 32 (4 octets) qui indique le nombre d'éléments du tableau. 12019 dans mon cas.
Je n'aime pas (pour l'instant) données d'en-tête (avant de décalage 1859)
Tableau seulement commencer à compenser 1863 (=1859+4).
J'ai défini mon propre Numpy dtype comme
dtype = np.dtype([
("time", np.float32),
("PosX", np.float32),
("PosY", np.float32),
("Alt", np.float32),
("Qx", np.float32),
("Qy", np.float32),
("Qz", np.float32),
("Qw", np.float32),
("dist", np.float32),
])
Et je suis en train de lire le fichier à l'aide de fromfile
:
a_bytes = np.fromfile(filename, dtype=dtype)
Mais je ne vois pas de paramètre pour fournir à fromfile
de passer de l'offset.
OriginalL'auteur scls | 2015-05-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ouvrir le fichier avec un standard de python d'ouverture de fichier, puis cherchent à sauter l'en-tête, puis la passer dans le fichier objet à
fromfile
. Quelque chose comme ceci:data = np.memmap(filename, dtype=dtype, mode='r', offset=offset_array, shape=N)
`c'est bien, si c'est un gros fichier, puis le memmap peut être le chemin à parcourir.
OriginalL'auteur reptilicus
J'ai fait face à un problème similaire, mais aucune des réponses ci-dessus m'a convaincu.
J'avais besoin de mettre en place quelque chose comme virtual table avec un très grand nombre d'enregistrements binaires que potentiellement occupé plus de mémoire que je peux me permettre dans un tableau numpy. Donc ma question était de savoir comment lire et écrire un petit ensemble d'entiers à partir d'un fichier binaire - un sous-ensemble d'un fichier dans un sous-ensemble d'un tableau numpy.
C'est une solution qui a fonctionné pour moi:
OriginalL'auteur Eugene Veselov