Mam plik binarny, który zawiera zapisy położenia płaszczyzny. Każdy rekord wygląd jak:Odczytaj plik binarny za pomocą Numpy fromfile i danego offsetu
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)
Więc każdy rekord to 32 bajtów.
Chciałbym uzyskać tablicę Numpy.
Przy przesunięciu 1859 znajduje się unsigned int 32 (4 bajty), które wskazują liczbę elementów tablicy. 12019 w moim przypadku.
Nie dbam (na razie) dane nagłówkowe (przed 1859) offsetowe
Array tylko zaczynają się od offsetu 1863 (= 1859 + 4).
zdefiniowałem własną NumPy dtype jak
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),
])
I Czytam plik używając fromfile
:
a_bytes = np.fromfile(filename, dtype=dtype)
Ale nie widzę każdy parametr w celu zapewnienia, aby fromfile
przekazać offset.
Dzięki. Rozwiązał mój problem. Zauważyłem również, że 'data = np.memmap (nazwa_pliku, dtype = dtype, tryb = 'r', offset = przesunięcie_tablica, kształt = N)' ' – scls
w prawo, jeśli jest to duży plik, to memmapa może być sposobem udać się. – reptilicus