2015-08-29 15 views
6

Sto eseguendo un test statistico che utilizza 10.000 permutazioni come distribuzione nulla.Il modo migliore per gestire una grande lista di dizionari in Python

Ciascuna permutazione è un dizionario di 10.000 chiavi. Ogni chiave è un gene, ogni valore è un insieme di pazienti corrispondenti al gene. Questo dizionario è generato a livello di codice e può essere scritto e letto da un file.

Voglio essere in grado di iterare su queste permutazioni per eseguire il mio test statistico; tuttavia, mantenere questa grande lista in pila rallenta le mie prestazioni.

C'è un modo per mantenere questi dizionari nella memoria archiviata e fornire le permutazioni mentre eseguo l'iterazione su di essi?

Grazie!

+0

Da dove provengono queste permutazioni? Provengono da un file di set di dati o sono generati in modo programmatico? –

+0

@JuanLopes Sono generati a livello di codice, ma possono essere scritti o letti da un file. –

+0

Come vengono memorizzati e accessibili quando li si genera? – SuperBiasedMan

risposta

1

Questo è un problema di calcolo generale; vuoi la velocità dei dati memorizzati nella memoria ma non hai abbastanza memoria. Di avere almeno le seguenti opzioni:

  • Acquista più RAM (ovviamente)
  • Lasciate che lo swap processo. Questo lascia al sistema operativo per decidere quali dati memorizzare su disco e cui memorizzare nella memoria
  • Non caricare tutto in memoria in una sola volta

Dal momento che si effettua l'iterazione set di dati, una soluzione potrebbe essere per caricare i dati pigramente:

def get_data(filename): 
    with open(filename) as f: 
     while True: 
      line = f.readline() 
      if line: 
       yield line 
      break 

for item in get_data('my_genes.dat'): 
    gather_statistics(deserialize(item)) 

una variante è quella di dividere i dati in più file o memorizzare i dati in un database in modo da poter processo batch i dati n voci alla volta.

Problemi correlati