Mam kod w Pythonie, którego wynikiem jest macierz o rozmiarze, którego wszystkie wpisy są tego typu float
. Jeśli zapiszę go z rozszerzeniem .dat
, rozmiar pliku będzie rzędu 500 MB. Czytałem, że użycie h5py
znacznie zmniejsza rozmiar pliku. Więc powiedzmy, że mam nazwaną tablicę numpy 2D A
. Jak zapisać go w pliku h5py? Ponadto, jak odczytać ten sam plik i umieścić go jako tablicę numpy w innym kodzie, ponieważ muszę wykonywać operacje na tablicy?
101
.dat
rozszerzeniem?np.savetxt("output.dat",A,'%10.8e')
np.save('output.dat', A)
który zapisze go w formacie binarnym (znacznie szybciej, dużo mniej zajętego miejsca).A = np.loadtxt('output.dat',unpack=True)
h5py
nie tworzy plików mniejszych niż tenp.save
? jesth5py
szybszy niżnp.save
dla tablic o rozmiarze podanym w pytaniu?Odpowiedzi:
h5py zapewnia model zbiorów danych i grup . Pierwsza to w zasadzie tablice, a druga to katalogi. Każdy jest nazwany. Powinieneś spojrzeć na dokumentację API i przykłady:
http://docs.h5py.org/en/latest/quick.html
Prosty przykład, w którym tworzysz wszystkie dane z góry i chcesz je po prostu zapisać w pliku hdf5, wyglądałby mniej więcej tak:
Następnie możesz załadować te dane z powrotem za pomocą: '
Zdecydowanie sprawdź dokumenty:
http://docs.h5py.org
Zapis do pliku hdf5 zależy od h5py lub pytables (każdy ma inny interfejs API języka Python, który znajduje się na szczycie specyfikacji pliku hdf5). Należy również zapoznać się z innymi prostych formatów binarnych przez numpy natywnie, takie jak
np.save
,np.savez
etc:http://docs.scipy.org/doc/numpy/reference/routines.io.html
źródło
data.h5
istnieje, ale nie mogę go wyświetlić za pomocą HDFView. Mogę odczytać zawartość za pomocą h5py, ale nie sprawdzam jej za pomocą HDFView. Każdy pomysł, dlaczego?Czystszy sposób obsługi otwierania / zamykania plików i unikania wycieków pamięci:
Przygotowanie:
Pisać:
Czytać:
źródło
with
Cechą Pythonie jest znany jako kierownik kontekstowego. Upewni się, że plik zostanie zamknięty po użyciu. Więcej informacji można znaleźć w oficjalnej dokumentacji: docs.python.org/3/library/contextlib.html