Python和HDF5大数据应用(1)

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值