C’è un vantaggio in termini di velocità di analisi o utilizzo della memoria nell’utilizzo di HDF5 per l’archiviazione di array di grandi dimensioni (invece di file binari flat)?

| | | |

Sto elaborando grandi array 3D, che spesso devo suddividere in vari modi per eseguire una varietà di analisi dei dati. Un tipico "cubo" può essere di circa 100 GB (e probabilmente diventerà più grande in futuro)

Sembra che il tipico formato di file consigliato per set di dati di grandi dimensioni in Python sia quello di utilizzare HDF5 (h5py o pytables). La mia domanda è: c'è qualche vantaggio in termini di velocità o utilizzo della memoria nell'utilizzo di HDF5 per archiviare e analizzare questi cubi anziché archiviarli in semplici file binari piatti? L'HDF5 è più appropriato per i dati tabulari, rispetto ai grandi array come quello con cui sto lavorando? Vedo che HDF5 può fornire una buona compressione, ma sono più interessato alla velocità di elaborazione e alla gestione dell'overflow di memoria.

Spesso voglio analizzare solo un grande sottoinsieme del cubo. Uno svantaggio sia di pytables che di h5py è che quando prendo una fetta dell'array, ottengo sempre un array numpy, consumando memoria. Tuttavia, se taglio una mappa insensibile di un file binario piatto, posso ottenere una vista, che mantiene i dati su disco. Quindi, sembra che io possa analizzare più facilmente settori specifici dei miei dati senza sovraccaricare la mia memoria.

Ho esplorato sia pytables che h5py e finora non ho visto il vantaggio di nessuno dei due per il mio scopo.