python制作图片数据集 h5py_python库——h5py入门讲解

转载自http://m.blog.csdn.net/csdn15698845876/article/details/73278120

h5py简单介绍

h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集),下面来看下如何创建组和数据集。

1. 创建一个h5py文件

import h5py

#要是读取文件的话,就把w换成r

f=h5py.File("myh5py.hdf5","w")

1

2

3

在当前目录下会生成一个myh5py.hdf5文件

2. 创建dataset数据集

import h5py

f=h5py.File("myh5py.hdf5","w")

#deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型

d1=f.create_dataset("dset1", (20,), 'i')

for key in f.keys():

print(key)

print(f[key].name)

print(f[key].shape)

print(f[key].value)

输出:

dset1

/dset1

(20,)

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

这里我们仅仅创建了一个存放20个整型元素的数据集,并没有赋值,默认全是0,如何赋值呢,看下面的代码。

import h5py

import numpy as np

f=h5py.File("myh5py.hdf5","w")

d1=f.create_dataset("dset1",(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]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

如果我们有现成的numpy数组,那么可以在创建数据集的时候就赋值,这个时候就不必指定数据的类型和形状了,只需要把数组名传给参数data。

import h5py

import numpy as np

f=h5py.File("myh5py.hdf5","w")

a=np.arange(20)

d1=f.create_dataset("dset1",data=a)

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]

1

2

3

4

5

6

7

8

9

10

11

12

现在把这几种创建的方式混合写下。看下面的代码

import h5py

import numpy as np

f=h5py.File("myh5py.hdf5","w")

#分别创建dset1,dset2,dset3这三个数据集

a=np.arange(20)

d1=f.create_dataset("dset1",data=a)

d2=f.create_dataset("dset2",(3,4),'i')

d2[...]=np.arange(12).reshape((3,4))

f["dset3"]=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]]

/dset3

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

3. 创建group组

import h5py

import numpy as np

f=h5py.File("myh5py.hdf5","w")

#创建一个名字为bar的组

g1=f.create_group("bar")

#在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。

g1["dset1"]=np.arange(10)

g1["dset2"]=np.arange(12).reshape((3,4))

for key in g1.keys():

print(g1[key].name)

print(g1[key].value)

输出:

/bar/dset1

[0 1 2 3 4 5 6 7 8 9]

/bar/dset2

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

注意观察数据集dset1和dset2的名字是不是有点和前面的不一样,如果是直接创建的数据集,不在任何组里面,那么它的名字就是/+名字,现在这两个数据集都在bar这个group(组)里面,名字就变成了/bar+/名字,是不是有点文件夹的感觉!继续看下面的代码,你会对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

.............

[]

[]

本文同步分享在 博客“Trent1985”(CSDN)。

如有侵权,请联系 [email protected] 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

你可能感兴趣的:(python制作图片数据集,h5py)