2013-09-10 8 views
8

Sono nuovo in Python. Ho un grande array, a, con dimensioni come (43200, 4000) e ho bisogno di salvarlo, poiché ne ho bisogno per l'elaborazione futura. quando provo a salvarlo con un np.savetxt, il file txt è troppo grande e il mio programma viene eseguito in errore di memoria in quanto ho bisogno di elaborare 5 file della stessa dimensione. C'è un modo per salvare enormi matrici in modo che ci vorrà meno memoria?Come salvare il grande array in modo che richieda meno memoria in python?

Grazie.

+3

Hai provato 'np.savetxt ('file.npy.gz')'? Ci vorrà più tempo per salvare e successivamente caricare (a causa della compressione), ma dovrebbe ridurre drasticamente la dimensione del file. – wflynny

+0

@Bill grazie per la risposta, appena provato con np.savetxt ('file.npy.gz'), e riduce le dimensioni del mio file ma non è in grado di caricare i dati indietro. – user2766019

+0

Sei sicuro di aver caricato il file con la stessa estensione di file in cui l'hai salvato? 'Np.loadtxt ('file.npy.gz')'. – wflynny

risposta

3

È possibile utilizzare PyTables per creare un file Hierarchical Data Format (HDF) per archiviare i dati. Questo fornisce alcune interessanti opzioni in-memory che collegano l'oggetto che si sta lavorando con il file è salvato in

Ecco un altro domande StackOverflow che dimostra come fare questo:. "How to store a NumPy multidimensional array in PyTables."

Se siete disposti a lavorare con la matrice come un oggetto Pandas dataframe, è anche possibile utilizzare l'interfaccia Panda a PyTables/HDF5, ad esempio:

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 

con i file di queste dimensioni, si potrebbe considerare se l'applicazione può essere effettuata con un algoritmo parallelo e potenzialmente applicato solo a sottoinsiemi di grandi matrici di dover consumare tutto l'array prima di procedere.

10

Il salvataggio dei dati nel file di testo è estremamente inefficiente. Numpy ha comandi di salvataggio incorporati save e savez/savez_compressed che sarebbero molto più adatti per la memorizzazione di array di grandi dimensioni.

A seconda di come si intende utilizzare i dati, è necessario anche esaminare il formato HDF5 (h5py o pytables), che consente di archiviare grandi set di dati, senza doverli caricare tutti in memoria.

Problemi correlati