J'ai un code Python dont le résultat est un matrice dimensionnée, dont les entrées sont toutes du type float
. Si je le sauvegarde avec l'extension .dat
la taille du fichier est de l’ordre de 500 MB. J'ai lu cela en utilisant h5py
réduit considérablement la taille du fichier. Donc, disons que j'ai le tableau 2D numpy nommé A
. Comment l'enregistrer dans un fichier h5py? Aussi, comment lire le même fichier et le placer en tant que tableau numpy dans un code différent, car je dois effectuer des manipulations avec le tableau?
h5py fournit un modèle de ensembles de données et de groupes . Le premier est fondamentalement des tableaux et le dernier que vous pouvez considérer comme des répertoires. Chacun est nommé. Vous devriez consulter la documentation de l'API et des exemples:
http://docs.h5py.org/en/latest/quick.html
Un exemple simple dans lequel vous créez toutes les données à l’avance et que vous voulez simplement enregistrer dans un fichier hdf5 ressemblerait à quelque chose comme:
In [1]: import numpy as np
In [2]: import h5py
In [3]: a = np.random.random(size=(100,20))
In [4]: h5f = h5py.File('data.h5', 'w')
In [5]: h5f.create_dataset('dataset_1', data=a)
Out[5]: <HDF5 dataset "dataset_1": shape (100, 20), type "<f8">
In [6]: h5f.close()
Vous pouvez ensuite charger ces données en utilisant:
In [10]: h5f = h5py.File('data.h5','r')
In [11]: b = h5f['dataset_1'][:]
In [12]: h5f.close()
In [13]: np.allclose(a,b)
Out[13]: True
Vérifiez certainement la documentation:
L'écriture dans un fichier hdf5 dépend de h5py ou de pytables (chacune a un python différente qui se trouve au-dessus de la spécification du fichier hdf5). Vous devriez également jeter un coup d'œil aux autres formats binaires simples fournis par numpy nativement tel que np.save
, np.savez
etc:
méthode plus propre pour gérer l'ouverture/la fermeture des fichiers et éviter les fuites de mémoire:
Prep:
import numpy as np
import h5py
data_to_write = np.random.random(size=(100,20)) # or some such
Écrire:
with h5py.File('name-of-file.h5', 'w') as hf:
hf.create_dataset("name-of-dataset", data=data_to_write)
Lecture:
with h5py.File('name-of-file.h5', 'r') as hf:
data = hf['name-of-dataset'][:]