标签: h5py

如何用h5py区分HDF5数据集和组?

我使用Python包h5py(版本2.5.0)来访问我的hdf5文件.

我想遍历文件的内容并对每个数据集执行某些操作.

使用visit方法:

import h5py

def print_it(name):
    dset = f[name]
    print(dset)
    print(type(dset))


with h5py.File('test.hdf5', 'r') as f:
    f.visit(print_it)
Run Code Online (Sandbox Code Playgroud)

对于我获得的测试文件:

<HDF5 group "/x" (1 members)>
<class 'h5py._hl.group.Group'>
<HDF5 dataset "y": shape (100, 100, 100), type "<f8">
<class 'h5py._hl.dataset.Dataset'>
Run Code Online (Sandbox Code Playgroud)

这告诉我文件中有一个数据集和一个组.然而,除了用于type()区分数据集和组之外,没有明显的方法.遗憾的是,h5py文档没有说明这个主题.他们总是假设您事先知道什么是组以及数据集是什么,例如因为他们自己创建了数据集.

我希望有类似的东西:

f = h5py.File(..)
for key in f.keys():
    x = f[key]
    print(x.is_group(), x.is_dataset()) # does not exist
Run Code Online (Sandbox Code Playgroud)

在使用h5py读取Python中的未知hdf5文件时,如何区分组和数据集?如何获取所有链接中所有组的所有数据集的列表?

python hdf5 h5py

15
推荐指数
2
解决办法
9929
查看次数

如何使用python将Hdf5文件部分复制到保持相同结构的新文件?

我有一个大的hdf5文件,看起来像这样:

A/B/dataset1, dataset2
A/C/dataset1, dataset2
A/D/dataset1, dataset2
A/E/dataset1, dataset2
Run Code Online (Sandbox Code Playgroud)

...

我想创建一个仅包含以下内容的新文件:A/B/dataset1,dataset2 A/C/dataset1,dataset2

python中最简单的方法是什么?

我做了:

fs = h5py.File('source.h5', 'r')
fd = h5py.File('dest.h5', 'w')
fs.copy('group B', fd)
Run Code Online (Sandbox Code Playgroud)

问题是我得到了dest.h5:

B/dataset1, dataset2
Run Code Online (Sandbox Code Playgroud)

并且我遗漏了一部分树枝.

python hdf5 h5py

14
推荐指数
1
解决办法
9975
查看次数

使用h5py创建的HDF5文件无法通过h5py打开

我在Ubuntu 12.04(32位版本)下使用Anaconda作为Python发行版并在ipython笔记本中编写,显然创建了一个没有任何问题的HDF5文件.底层数据都是numpy数组.例如,

import numpy as np
import h5py

f = h5py.File('myfile.hdf5','w')

group = f.create_group('a_group')

group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip')
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试从新的iypthon笔记本打开此文件,我会收到一条错误消息:

f = h5py.File('myfile.hdf5', "r")

---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-4-b64ac5089cd4> in <module>()
----> 1 f = h5py.File(file_name, "r")

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, **kwds)
    220 
    221             fapl = make_fapl(driver, libver, **kwds)
--> 222             fid = make_fid(name, mode, userblock_size, fapl)
    223 
    224         Group.__init__(self, fid)

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in make_fid(name, mode, userblock_size, fapl, fcpl)
     77 
     78     if mode == …
Run Code Online (Sandbox Code Playgroud)

python io numpy hdf5 h5py

14
推荐指数
1
解决办法
3万
查看次数

更新h5py数据集

有没有人想从h5py更新hdf5数据集?假设我们创建了一个数据集,如:

import h5py
import numpy
f = h5py.File('myfile.hdf5')
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4"))
new_dset_value=numpy.zeros((3,3),"=i4")
Run Code Online (Sandbox Code Playgroud)

是否可以将dset扩展为3x3 numpy阵列?

python hdf5 h5py

13
推荐指数
1
解决办法
1万
查看次数

关闭打开的h5py数据文件

在我们的实验室中,我们hdf5通过python包将数据存储在文件中h5py.

在实验开始时,我们在hdf5文件中的数组数组(以及其他内容)之后创建文件和存储数组.当实验失败或被中断时,文件未正确关闭.因为我们的实验从iPython对数据对象的引用运行在内存中(某处).

有没有办法扫描所有打开的h5py数据对象并关闭它们?

python hdf5 ipython h5py

13
推荐指数
2
解决办法
1万
查看次数

使用h5py保存pandas DataFrame,以便与其他hdf5阅读器进行互操作

这是一个示例数据框:

import pandas as pd

NaN = float('nan')
ID = [1, 2, 3, 4, 5, 6, 7]
A = [NaN, NaN, NaN, 0.1, 0.1, 0.1, 0.1]
B = [0.2, NaN, 0.2, 0.2, 0.2, NaN, NaN]
C = [NaN, 0.5, 0.5, NaN, 0.5, 0.5, NaN]
columns = {'A':A, 'B':B, 'C':C}
df = pd.DataFrame(columns, index=ID)
df.index.name = 'ID'
print(df)

      A    B    C
ID               
1   NaN  0.2  NaN
2   NaN  NaN  0.5
3   NaN  0.2  0.5
4   0.1  0.2  NaN
5   0.1  0.2 …
Run Code Online (Sandbox Code Playgroud)

matlab numpy h5py pandas

13
推荐指数
3
解决办法
1万
查看次数

使用h5py编写大型hdf5数据集

目前,我正在使用h5py生成hdf5数据集.我有类似的东西

import h5py
import numpy as np
my_data=np.genfromtxt("/tmp/data.csv",delimiter=",",dtype=None,names=True)

myFile="/tmp/f.hdf"    
with h5py.File(myFile,"a") as f:
  dset = f.create_dataset('%s/%s'%(vendor,dataSet),data=my_data,compression="gzip",compression_opts=9)
Run Code Online (Sandbox Code Playgroud)

这适用于相对较大的ASCII文件(400MB).我想对更大的数据集(40GB)做同样的事情.使用h5py有更好或更有效的方法吗?我想避免将整个数据集加载到内存中.

有关数据的一些信息:

  1. 我不知道数据的类型.理想情况下,我想用dtype=Nonenp.loadtxt()
  2. 我不知道文件的大小(尺寸).他们各不相同

python numpy hdf5 h5py

13
推荐指数
1
解决办法
8059
查看次数

h5py:切片阵列数据集的正确方法

我在这里有点困惑:

据我所知,h5py的.value方法读取整个数据集并将其转储到一个数组中,这个数组很慢而且不鼓励(通常应该替换为[()].正确的方法是使用numpy-esque切片.

但是,我得到了令人不快的结果(使用h5py 2.2.1):

import h5py
import numpy as np
>>> file = h5py.File("test.hdf5",'w')
# Just fill a test file with a numpy array test dataset
>>> file["test"] = np.arange(0,300000)

# This is TERRIBLY slow?!
>>> file["test"][range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is fast
>>> file["test"].value[range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is also fast
>>> file["test"].value[np.arange(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This …
Run Code Online (Sandbox Code Playgroud)

python numpy h5py

11
推荐指数
1
解决办法
9667
查看次数

使用不同大小的h5py数组进行保存

我试图使用HDF5数据格式存储大约3000个numpy数组.数组长度从5306到121999 np.float64不等

我收到 Object dtype dtype('O') has no native HDF5 equivalent 错误,因为数据的不规则性numpy使用一般对象类.

我的想法是将所有数组填充到121999长度并将大小存储在另一个数据集中.

然而,这似乎在太空中效率很低,有更好的方法吗?

编辑:澄清一下,我想存储3126个数组dtype = np.float64.我将它们存储在a中,list并且当h5py执行例程时它将转换为数组,dtype = object因为它们的长度不同.为了说明它:

a = np.array([0.1,0.2,0.3],dtype=np.float64)
b = np.array([0.1,0.2,0.3,0.4,0.5],dtype=np.float64)
c = np.array([0.1,0.2],dtype=np.float64)

arrs = np.array([a,b,c]) # This is performed inside the h5py call
print(arrs.dtype)
>>> object
print(arrs[0].dtype)
>>> float64
Run Code Online (Sandbox Code Playgroud)

python arrays numpy hdf5 h5py

11
推荐指数
2
解决办法
1万
查看次数

在Google Cloud Bucket中保存Keras ModelCheckpoints

我正在使用带有TensorFlow后端的Keras在Google Cloud Machine Learning Engine上培训LSTM网络.在对gcloud和我的python脚本进行一些调整之后,我设法部署我的模型并执行成功的训练任务.

然后我尝试使用Keras modelCheckpoint回调使我的模型在每个纪元后保存检查点.使用Google Cloud运行本地培训工作可以完美地按预期运行.在每个纪元之后,权重将存储在指定的路径中.但是,当我尝试在Google云端机器学习引擎上在线运行相同的工作时weights.hdf5,不会将其写入我的Google Cloud Bucket.相反,我收到以下错误:

...
File "h5f.pyx", line 71, in h5py.h5f.open (h5py/h5f.c:1797)
IOError: Unable to open file (Unable to open file: name = 
'gs://.../weights.hdf5', errno = 2, error message = 'no such file or
directory', flags = 0, o_flags = 0)
Run Code Online (Sandbox Code Playgroud)

我调查了这个问题,事实证明,Bucket本身没有问题,因为Keras Tensorboard回调确实正常工作并将预期输出写入同一个存储桶.我还确保h5py通过在以下setup.py位置提供它来包含它:

??? setup.py
    ??? trainer
    ??? __init__.py
    ??? ...
Run Code Online (Sandbox Code Playgroud)

实际包含setup.py如下所示:

# setup.py
from setuptools import setup, find_packages

setup(name='kerasLSTM',
      version='0.1',
      packages=find_packages(), …
Run Code Online (Sandbox Code Playgroud)

hdf5 h5py google-cloud-platform keras tensorflow

11
推荐指数
2
解决办法
3154
查看次数

标签 统计

h5py ×10

hdf5 ×8

python ×8

numpy ×5

arrays ×1

google-cloud-platform ×1

io ×1

ipython ×1

keras ×1

matlab ×1

pandas ×1

tensorflow ×1