输入和输出numpy数组到h5py

lov*_*eed 88 python arrays numpy h5py

我有一个Python代码,其输出是一个 在此输入图像描述size矩阵,其条目都是类型float.如果我使用扩展名保存它,.dat文件大小约为500 MB.我读到使用h5py大大减少了文件大小.所以,假设我有名为的2D numpy数组A.如何将其保存到h5py文件?另外,我如何读取相同的文件并将其作为一个numpy数组放在不同的代码中,因为我需要对数组进行操作?

Jos*_*del 120

h5py提供了数据集的模型.前者基本上是数组,后者你可以认为是目录.每个都被命名.您应该查看API和示例的文档:

http://docs.h5py.org/en/latest/quick.html

您预先创建所有数据并且只想将其保存到hdf5文件的简单示例如下所示:

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()
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令加载该数据:'

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
Run Code Online (Sandbox Code Playgroud)

绝对查看文档:

http://docs.h5py.org

写入hdf5文件取决于h5py或pytables(每个都有一个不同的python API,它位于hdf5文件规范之上).你也应该看看通过numpy的原生提供,如其他简单的二进制格式np.save,np.savez等等:

http://docs.scipy.org/doc/numpy/reference/routines.io.html


Lav*_*dor 88

一个清洁的方式来处理文件打开/关闭,避免内存泄漏:

准备:

import numpy as np
import h5py

data_to_write = np.random.random(size=(100,20)) # or some such
Run Code Online (Sandbox Code Playgroud)

写:

with h5py.File('name-of-file.h5', 'w') as hf:
    hf.create_dataset("name-of-dataset",  data=data_to_write)
Run Code Online (Sandbox Code Playgroud)

读:

with h5py.File('name-of-file.h5', 'r') as hf:
    data = hf['name-of-dataset'][:]
Run Code Online (Sandbox Code Playgroud)

  • @DrDeSancho 不,[with 声明](https://docs.python.org/2/reference/compound_stmts.html#the-with-statement) (18认同)
  • 无需关闭文件? (2认同)