3.1数据集基础
创建一个文件来保存数据集
>>> f = h5py.File("testfile.hdf5")
HDF5文件中的任何数据集都有一个名字。
当把一个新的Numpy数组赋给文件中任意一个名字会发生什么:
>>>arr = np.ones((5,2))
>>>>f["my dataset"] = arr
>>>>dset = f["my dataset"]
>>>>dset<HDF5 dataset "my dataset":shape(5,2),type"<f8">
存入的是一个Numpy数组,取出来的确实另外的东西:一个 h5py.Dataset类的实例。
这是一个代理对象,他会代理你的请求读写磁盘上的HDF5数据集
3.11类型和形状
>>>dset.dtype #类型
>>>> dtype('flaot64')
>>>>dset.shape #形状
>>>> (5,2)
3.12读和写
>>>out =dset[...] #读
>>>> dset[1:4,1] =2.0 #改写
3.13创建空的数据库
>>>f = h5py.File("tsetfile.hdf5")
>>>>dset = f.create_dataset("test1",(10,10),dtype=np.float32) # 文件名, 形状, 类型
3.14指定存储类型来节省空间
内存中使用float64 存入磁盘时会选择float32 节省了一半空间有一个Numpy数组 bigdata:
>>>bigdata=np.ones((100,100))
>>>>bigdata.dtypedtype('float64')
>>>>bigdata.shape(100,100)
将数组存入文件, 建立一个双精度浮点数据集:
>>>with h5py.File('big1.hdf5','w') as f1:. . . f1['big'] = bigdata
指定文件保存为单精度浮点
>>>with h5py.File('big2.hdf5','w') as f2:
. . .
f2.create_dataset('big',data=bigdata,dtype=np.float32)>>>f1=h5py.File("big1.hdf5")>>>f2=h5py.File("big2.hdf5")>>>f1['big'].dtypedtype('float64')>>>f2['big'].dtypedtype('float32')
>>>f1=h5py.File("big1.hdf5")
>>>>f2=h5py.File("big2.hdf5")
>>>>f1['big'].dtypedtype('float64')
>>>>f2['big'].dtypedtype('float32')
使用环境管理器 with语句
代码打开全新的file对象仅在f代码块中有效。当f退出时文件自动关闭(哪怕抛出了异常!!!)
实例:
>>>with open ("somefile.txt","w") as f:
>. . . f.write("Hello")
3.15自动类型转换和直读
对于将磁盘中存储的float32 转为float64 解决方案:直接读入一个预分配指定类型的Numpy数组
>>>bigdata=np.ones((100,100))
>>>>with h5py.File('big2.hdf5','w') as f2:. . . f2.create_dataset('big',data=bigdata,dtype=np.float32)>>>dset = f2['big']
>>>>dset.dtypedtype('float32')
>>>>deset.shape(100,100)
>>>>big_out = np.empty( (100,100), dtype = np.float64)
>#np.empty 创建了一个数组,和np.zeros或np.ones 不同在于它不会对元素进行初始化
>>>>dset.read_direct(big_out)
3.16用astype读
使用数据集对象上附加的 astype环境管理器读取数据集的前1000(100个吧?)个元素并 从单精度转换为双精度:
>>>with dset.astype('float64'):
>... out = dset[0,:]
>>>> out.dtype
>dtype('float64')
3.17改变形状
只要两个形状数组元素个数相同 可以创建数据集时指定一个跟输入数组形状不同的形状类似 np.reshape
>>>imagedata.shape
>(100,480,640)
>>>>f.creat_dataset('newshape',data=imagedata,shape=(100,2,240,640)
3.18 默认填充
值创建一个全新的数据集时,你会发现默认值填的都是0:
>>>dset = f.create_dataset('empty' ,(2,2), dtype=np.int32)
>>>>dset[. . .]
>array([[0,0],
> [0,0] )
HDF5提供填充默认值 在创建数据集时定义,且不可更改:
>>>dset = f.create_dataset('filled', (2,2), dtype =np.int32,fillvalue=42 )
>>>>dset[. . .]
>array([[42,42]
> [42,42]])
>>>>dset.fillvalue
>42