zoukankan      html  css  js  c++  java
  • h5py库

    参考文献:http://docs.h5py.org/en/latest/high/dataset.html

    h5py文件存放数据集(dataset)和组(group)。

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

    一、下面来看下如何创建group和dataset
    import h5py
    #如果是读取文件的话,w换成r
    f = h5py.File("myh5py.hdf5","w");

    二、创建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]

    三、给数据集赋值

    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]

    三、将现成的数据集传给参数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]
    

     四、混合创建数据集dataset

    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]

    六、创建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]]

    注意观察:现在这两个数据集都在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
    .............
    []
    []

    八、高级特征

    用关键词compression来指定压缩滤波器,而滤波器的可选参数使用关键词compression_opt来指定:

    dset = f.create_dataset("zipped", (100, 100), compression="gzip")
  • 相关阅读:
    基于docker的MongoDB复制(副本集)
    (已解决)ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib
    【洛谷3530】[POI2012] FES-Festival(差分约束+Tarjan)
    【洛谷4765】[CERC2014] The Imp(贪心+DP)
    【洛谷7093】[CERC2014] Can't stop playing(搜索)
    【CF755G】PolandBall and Many Other Balls(倍增FFT)
    【洛谷3896】[湖南集训] Clever Rabbit(搜索)
    【洛谷7215】[JOISC2020] 首都(点分治+BFS)
    【BZOJ4173】数学(欧拉函数)
    【洛谷5748】集合划分计数(多项式exp)
  • 原文地址:https://www.cnblogs.com/ccpang/p/11870659.html
Copyright © 2011-2022 走看看