免责声明:网站内容仅供个人学习记录,禁做商业用途,转载请注明出处。

版权所有 © 2017-2020 NEUSNCP个人学习笔记 辽ICP备17017855号-2

Python中h5py模块的使用(基础入门)

sunmengqi    2018年10月8日 18:19:18

使用h5py模块进行处理的文件。后缀为hdf5。关于hdf5文件的作用,官方文档里有着简单的叙述,当然——是英文的:

HDF5 lets you store huge amounts of numerical data, and easily manipulate that data from NumPy. For example, you can slice into multi-terabyte datasets stored on disk, as if they were real NumPy arrays. Thousands of datasets can be stored in a single file, categorized and tagged however you want.

如果你想要深入且系统地学习h5py的相关知识,那么请查看官方文档的其他详细教程,链接如下:h5py官方文档 

下面只是简单介绍相关的入门级知识,方便我们大家了解与使用。

hdf5文件能够存储两种类型的数据对象:数据集(dataset),组(group)

dataset可以类比为数组:和numpy的数组差不多

group可以类比为字典:有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集)。

关于文件读写:

#读文件
import h5py
f=h5py.File("test.hdf5","r")
#写文件
import h5py
f=h5py.File("test.hdf5","w")

类似的,也可以采用下面的形式:

with h5py.File("文件名", 'r') as fin:

创建dataset数据集的代码如下:

import h5py
f=h5py.File("test.hdf5","w")
#dataset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型(int)
d1=f.create_dataset("dataset1", (20,), 'i')

关于赋值操作,借用网上的一个例子说明:

#赋值
d1[...]=np.arange(20)
#或者我们可以直接按照下面的方式创建数据集并赋值
f["dset2"]=np.arange(15)

for key in f.keys():
    print(f[key].name)
    print(f[key].value)

这样赋值,结果输出:

输出:
/dset1
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
/dset2
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
 

hdf5文件中的“HDF”意为“分层数据结构”,这一功能可以体现于hdf5的group类型对象。

我们可以将我们的hdf5文件看作是一个文件夹,这是一个根文件夹(也是root group),创建subgroup使用create_group实现,比如说:

#创建一个名字为bar的组
g1=f.create_group("bar")

在这个“文件夹”里面可以创建数据集:

#在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。
g1["dset1"]=np.arange(10)
g1["dset2"]=np.arange(12).reshape((3,4))

其实这里的g1和f所拥有的方法是一样的,结构有点类似于一层一层的文件夹。

借用网上的一个小例子,可以清晰地说明group和dataset的关系:

import h5py
import numpy as np
f=h5py.File("myh5py.hdf5","w")

#创建组bar1,组bar2,数据集dset
g1=f.create_group("bar1")
g2=f.create_group("bar2")
d=f.create_dataset("dset",data=np.arange(10))

#在bar1组里面创建一个组car1和一个数据集dset1。
c1=g1.create_group("car1")
d1=g1.create_dataset("dset1",data=np.arange(10))

#在bar2组里面创建一个组car2和一个数据集dset2
c2=g2.create_group("car2")
d2=g2.create_dataset("dset2",data=np.arange(10))

#根目录下的组和数据集
print(".............")
for key in f.keys():
    print(f[key].name)

#bar1这个组下面的组和数据集
print(".............")
for key in g1.keys():
    print(g1[key].name)


#bar2这个组下面的组和数据集
print(".............")
for key in g2.keys():
    print(g2[key].name)

#那么car1组和car2组下面都有什么
print(".............")
print(c1.keys())
print(c2.keys())

输出是这样的:

输出:
.............
/bar1
/bar2
/dset
.............
/bar1/car1
/bar1/dset1
.............
/bar2/car2
/bar2/dset2
.............
[]
[]

以上就是笔者在网络等资料中学习整理的h5py入门级的相关知识,如有不准确的地方,希望大家指正,我们一起学习进步。

浏览: 8.6K

[[total]] 条评论

添加评论
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]楼
  2. 点击加载更多……
  3. 添加评论