Eu tenho um código Python cuja saída é uma matriz dimensionada, cujas entradas são todas do tipo float
. Se eu salvar com a extensão, .dat
o tamanho do arquivo é da ordem de 500 MB. Eu li que o uso h5py
reduz consideravelmente o tamanho do arquivo. Então, digamos que eu tenha o array numpy 2D nomeado A
. Como faço para salvá-lo em um arquivo h5py? Além disso, como faço para ler o mesmo arquivo e colocá-lo como uma matriz numpy em um código diferente, pois preciso fazer manipulações com a matriz?
100
.dat
extensão?np.savetxt("output.dat",A,'%10.8e')
np.save('output.dat', A)
que o salvará em um formato binário (muito mais rápido, muito menos espaço usado).A = np.loadtxt('output.dat',unpack=True)
h5py
não cria arquivos menores do que aquelesnp.save
? éh5py
mais rápido do quenp.save
para matrizes do tamanho fornecido na pergunta?Respostas:
h5py fornece um modelo de conjuntos de dados e grupos . O primeiro é basicamente arrays e o último você pode pensar em diretórios. Cada um tem um nome. Você deve consultar a documentação da API e exemplos:
http://docs.h5py.org/en/latest/quick.html
Um exemplo simples em que você está criando todos os dados antecipadamente e deseja apenas salvá-los em um arquivo hdf5 seria algo como:
Você pode então carregar esses dados de volta usando: '
Definitivamente, verifique a documentação:
http://docs.h5py.org
A gravação em arquivo hdf5 depende de h5py ou pytables (cada um possui uma API python diferente que se baseia na especificação do arquivo hdf5). Você também deve dar uma olhada em outros formatos binários simples fornecidas por numpy nativamente tais como
np.save
,np.savez
etc:http://docs.scipy.org/doc/numpy/reference/routines.io.html
fonte
data.h5
existe, mas não consigo visualizá-lo com HDFView. Posso ler o conteúdo com h5py, mas não inspecionar com HDFView. Alguma ideia do porquê?Uma maneira mais limpa de abrir / fechar arquivos e evitar vazamentos de memória:
Preparação:
Escrever:
Ler:
fonte
with
recurso do Python é conhecido como gerenciador de contexto. Isso garantirá que o arquivo seja fechado depois de usado. Mais informações estão disponíveis na documentação oficial: docs.python.org/3/library/contextlib.html