2013-09-10 21 views
8

Jestem nowy w Pythonie. Mam dużą tablicę, a, o wymiarach takich jak (43200, 4000) i muszę ją zapisać, ponieważ potrzebuję jej do przyszłego przetwarzania. kiedy próbuję go zapisać przy pomocy np.savetxt, plik txt jest zbyt duży, a mój program uruchamia się w błąd pamięci, ponieważ muszę przetworzyć 5 plików o tym samym rozmiarze. Czy istnieje sposób na uratowanie ogromnych tablic tak, że zajmie to mniej pamięci?Jak zapisać dużą tablicę, aby zabierało mniej pamięci w pythonie?

Dzięki.

+3

Czy próbowałeś 'np.savetxt ('file.npy.gz')'? Zapisanie i późniejsze wczytanie (z powodu kompresji) potrwa dłużej, ale powinno znacznie zmniejszyć rozmiar pliku. – wflynny

+0

@Bill dzięki za odpowiedź, po prostu wypróbowany z np.savetxt ('file.npy.gz'), a to zmniejszy mój rozmiar pliku, ale nie może załadować danych z powrotem. – user2766019

+0

Czy na pewno załadowałeś plik z takim samym rozszerzeniem, z jakim go zapisałeś? 'np.loadtxt ('file.npy.gz')'. – wflynny

Odpowiedz

3

Możesz użyć PyTables do utworzenia pliku Hierarchical Data Format (HDF) do przechowywania danych. Daje to ciekawe możliwości w pamięci, które łączą przedmiot pracujesz z do pliku zapisanego w

Oto kolejne pytania StackOverflow, który pokazuje, jak to zrobić. "How to store a NumPy multidimensional array in PyTables."

Jeśli jesteś gotów pracować z tablicy jako obiekt pandy DataFrame, można również korzystać z interfejsu pandy do PyTables/hdf5, np

import pandas 
import numpy as np 
a = np.ones((43200, 4000)) # Not recommended. 
x = pandas.HDFStore("some_file.hdf") 

x.append("a", pandas.DataFrame(a)) # <-- This will take a while. 
x.close() 

# Then later on... 
my_data = pandas.HDFStore("some_file.hdf") # might also take a while 
usable_a_copy = my_data["a"] # Be careful of the way changes to 
          # `usable_a_copy` affect the saved data. 

copy_as_nparray = usable_a_copy.values 

z akt tej wielkości, można rozważyć, czy aplikacja może być wykonywane za pomocą algorytmu równoległego i potencjalnie zastosowane tylko do podzbiorów dużych tablic niż konieczność skonsumowania całej tablicy przed kontynuowaniem.

10

Zapisywanie danych w pliku tekstowym jest niezwykle nieefektywne. Numpy ma wbudowane komendy zapisywania save i savez/savez_compressed, które byłyby znacznie lepiej przystosowane do przechowywania dużych tablic.

W zależności od tego, w jaki sposób zamierzasz korzystać z danych, powinieneś również zajrzeć do formatu HDF5 (h5py lub pytables), który umożliwia przechowywanie dużych zestawów danych bez konieczności wczytywania ich do pamięci.

Powiązane problemy