在h5py文件上传中,np.array(file [key] [:])和np.array(file [key])之间有什么区别

时间:2018-03-09 22:29:26

标签: python python-3.x h5py

我目前正在玩h5py文件提取。当我运行下面的脚本时,它似乎输出相同的结果。谁知道差异?

train_dataset = h5py.File('datasets/train_happy.h5', "r")
train_set_x_orig1 = np.array(train_dataset["train_set_x"][:])

train_set_x_orig2 = np.array(train_dataset["train_set_y"]) 

感谢任何提供输入的人!

1 个答案:

答案 0 :(得分:2)

使用来自其他SO问题的示例文件

In [183]: f = h5py.File('temp.h5','r')
In [184]: list(f.keys())
Out[184]: ['db1', 'db2', 'db3', 'db4', 'temp']

只需要键返回一个Dataset(类似操作的字典)

In [185]: x = f['db1']
In [186]: type(x)
Out[186]: h5py._hl.dataset.Dataset
In [187]: x
Out[187]: <HDF5 dataset "db1": shape (5,), type "|V4">

添加[:](或其他一些索引)足以将数据加载到数组中:

In [188]: y = f['db1'][:]
In [189]: type(y)
Out[189]: numpy.ndarray
In [190]: y
Out[190]: array([('a',), ('ab',), ('',), ('',), ('',)], dtype=[('str', 'O')])

无需进一步np.array包装。

http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data

value属性也有效(我不确定这在哪里记录):

In [191]: x.value
Out[191]: array([('a',), ('ab',), ('',), ('',), ('',)], dtype=[('str', 'O')])

array包装器有效:

In [192]: np.array(x)
Out[192]: array([('a',), ('ab',), ('',), ('',), ('',)], dtype=[('str', 'O')])

快速设置timeits并没有显示任何差异。

但在发行说明中:

http://docs.h5py.org/en/latest/whatsnew/2.1.html#dataset-value-property-is-now-deprecated

  

属性 Dataset.value (可追溯到h5py 1.0)已弃用,将在以后的版本中删除。此属性将整个数据集转储到NumPy数组中。使用.value的代码应该更新为使用NumPy索引,使用 mydataset [...] mydataset [()]