如何使用HDF5文件里的数据?

HDF5是一种可移植的、广泛支持的格式,用于表示以嵌套键值字典形式组织的序列化多维数组。以键值的方式可以更科学地分类管理数据,获取数据时也可以根据需要,通过不同的键名获取自己想要的数据。Python通过h5py库支持HDF5,该库以NumPy数组的形式接收和返回数据。

import h5py
data=torch.tensor([[[1,2,3],
                     [4,5,6]],
                    [[7,8,9],
                     [10,11,12]]],dtype = torch.float64)
data1 = data[0] # tensor([[1., 2., 3.],[4., 5., 6.]])
data2 = data[1] # tensor([[7., 8., 9.],[10., 11., 12.]])

f = h5py.File('E:/mydatas.hdf5', 'w')
# File函数的第一个值改为保存hdf5文件的路径,mydatas是我自己随意取的文件名;
#以‘w’的方式打开,如果没有mydatas.hdf5这个文件会新创建一个,如果有则覆盖里面的内容.
f.create_dataset('Data1', data=data1.numpy()) 
# 将tensor类型的data1转化为numpy数组,并以键名为Data1的形式储存(键名随意取)
f.create_dataset('Data2', data=data2.numpy())
 # 将tensor类型的data2转化为numpy数组,并以键名为Data2的形式储存
f.close() # 记得关闭文件!!!

f = h5py.File('E:/mydatas.hdf5', 'r')
dset1 = f['Data1'] # dset1数据类型为numpy数组
dset2 = f['Data2'] # dset2数据类型为numpy数组
t1 = torch.from_numpy(dset1) 
#  torch.from_numpy()将numpy数组转化成tensor,括号内输入numpy数组
t2 = torch.from_numpy(dset1)
f.close() # 记得关闭文件

看上去代码没啥问题,但是code的过程中你以为永远只是你以为的!
运行就有惊喜,报错!TypeError: expected np.ndarray (got Dataset)!错误行定位在t1 = torch.from_numpy(dset1)
from_numpy()这个函数got了一个Dataset类型的参数???

解决办法很简单其实,我们将索引一下t1、t2里面的内容就好了,里面的内容是numpy数组类型,也正是from_numpy()想要的。
上述代码改为:t1 = torch.from_numpy(dset1[:])即可,t2同理。t1、t2是个二维的张量,一个冒号代表索引第一维的全部数据,同时默认索引第二位的数据。同样也可以把第二维补全,这么索引t1 = torch.from_numpy(dset1[ :,:])

如果不调用from_numpy,也不索引,尝试直接打印dset1、dset2print(dset1)也是行不通的(不报错,但是看不到内容)
在这里插入图片描述
同样的解决方法,加个索引dset1[:]顺利打印出内容,皆大欢喜!

昨天:20年12月23号,迎来第一个收藏者,纪念一下。继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值