Chciałbym zapisać zawartość tablicy numpy float w surowym pliku binarnym jako 16-bitowe liczby całkowite ze znakiem. Próbowałem to osiągnąć, używając ndarray.tofile, ale nie mogę znaleźć odpowiedniego ciągu formatu. Wygląda na to, że plik jest zapisany w podwójnym formacie, niezależnie jak wybieram ciąg formatu. Jak mam to zrobic? Dzięki.Napisz surowy plik binarny z danymi tablicy NumPy
Odpowiedz
Myślę, że najprostszym sposobem, aby to zrobić, to najpierw przekonwertować tablicę do Int16,
array.astype('int16').tofile(filename)
Spójrz modułu struct, spróbuj ten przykład:
import struct
import numpy
f=open("myfile","wb")
mydata=numpy.random.random(10)
print(mydata)
myfmt='f'*len(mydata)
# You can use 'd' for double and <or> to force endinness
bin=struct.pack(myfmt,*mydata)
print(bin)
f.write(bin)
f.close()
Na podstawie doświadczenia zdecydowanie zalecam ** przeciw ** użycie 'struct.pack'. Jego API wymaga odznaczenia tablicy (tzn. Użycia operatora '*') na zmienne, które wpływają na wydajność ** drastycznie ** dla dużych rozmiarów macierzy. Każdy element tablicy będzie potrzebował nowego 64-bitowego wskaźnika (na maszynie 64-bitowej), który zostanie utworzony na stosie w celu wskazania tego elementu. Po prostu trzymaj się 'tostring' /' tobytes'/'tofile', aby uniknąć tego narzutu. Na przykład w naszym przypadku mieliśmy do czynienia z tablicami 100 Mb, co prowadzi do potężnego 6,4 GB pamięci RAM, więc 'struct.pack' może wykonać swoją pracę. –
Użytkownik może użyj scipy.io.savemat, który pozwala zapisać słownik nazw i tablic w pliku w stylu Matlaba:
import scipy.io as sio
sio.savemat(filename, pydict)
Tutaj pydict może być = { 'nazwa1': np.array1 'name2': np.array2, ...}
Aby załadować dict wystarczy:
pydict = sio.loadmat(filename)
- 1. Napisz ciąg danych do tablicy znaków NumPy?
- 2. Odczytaj plik binarny do tablicy
- 3. Konwertuj obraz Base64 na surowy plik binarny za pomocą Node.js
- 4. Przenieść surowy plik binarny za pomocą apache commons-net FTPClient?
- 5. Python: napisz plik wav do numpy float array
- 6. Napisz pobrany plik binarny na dysk w Javie
- 7. Odczytaj plik binarny za pomocą Numpy fromfile i danego offsetu
- 8. Zapisywanie numpy tablica z danymi mieszanych
- 9. Napisz plik Rdata z C++
- 10. Napisz duży plik
- 11. Napisz wiele numpy tablic do pliku
- 12. plik binarny ciąg
- 13. RESTful produkuje plik binarny
- 14. Jak scalić plik binarny?
- 15. odczytać cały plik binarny do tablicy w pojedynczy połączeń C++
- 16. Napisz plik w formacie hdf z Javą
- 17. Napisz plik gzip z ramki danych
- 18. Tworzenie słownika z tablicy numpy
- 19. Relu Prime z numpy tablicy
- 20. Pomieszaj kolumny tablicy z Numpy
- 21. Obliczanie kurtozy z tablicy numpy?
- 22. WinRT StorageFile Napisz pobrany plik
- 23. Napisz plik XML, używając Pythona
- 24. PHP Tworzenie tablicy wielowymiarowej z tablicy z danymi relacyjnymi
- 25. Zmiana kształtu tablicy w NumPy
- 26. Jak usunąć plik binarny z historii skamieniałości
- 27. Czyszczenie tablicy C# z wrażliwymi danymi
- 28. Plik obiektowy na kod binarny
- 29. Napisz duży 4 bajtów jako liczbę całkowitą bez znaku, binarny
- 30. Automatycznie otwórz plik jako plik binarny z Ruby
Sieć [numpy dokumentacja] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.tofile.html) stwierdza "Informacje o endianness i precyzji są tracone". Czy to działa na wszystkich platformach? – Gilly
'tofile' zapisuje tylko surowe dane binarne tablicy, a nie metadane tablicy. Typowym przykładem użycia jest otwarcie pliku, napisanie odpowiedniego nagłówka dla danego typu pliku i użycie 'tofile' do wypełnienia nieprzetworzonych danych. Obowiązkiem oprogramowania czytającego plik jest wyprowadzenie metadanych (endianness, precyzja, kształt) z nagłówka i zmutowanie surowych danych do postaci odpowiedniej dla tej platformy. Bez metadanych nie ma możliwości prawidłowej interpretacji surowej zawartości tablicy. Jeśli potrzebujesz tylko czytać i zapisywać tablice, spójrz na "python hd5" lub "numpy.save". –
Dziękujemy! Ten dodatkowy "astype" był potrzebny nawet wtedy, gdy utworzyłem tablicę określającą 'np.array ([], dtype = np.int8)'. –