我有一个要用h5py读取的mat文件,我需要提取np.arrays或其他形式的数据以对其进行分析并绘制图表。
in: data = h5py.File('footprints/HuascoFP.mat','r')
FP = data["FP"]
FP.keys() # ---> ['EC', 'LAS', 'MWS', 'OMS', 'datenumber', 'meteo']
OMS = FP["OMS"]
OMS.keys() #----> ['fp1D', 'fp2D', 'posR', 'posT']
fp2d = OMS["fp2D"]#----> ['FP', 'x', 'y']
FP =fp2d["FP"]
print(FP)
out:<HDF5 dataset "FP": shape (475, 1), type "|O">'
[如果我尝试“ FP [:2]”,我会得到:([[],[]],dtype = object),没有任何数据。
想要你们的帮助
我本来是要写评论的,但是太长了。这是我的答案的链接:SO_55566865:difference-between-two-ways-of-accessing-the-hdf5-group
很长。第一部分显示了如何取消对HDF5“对象引用”的引用。 (答案的其余部分特定于SVHN数据集。)
我将尝试适用于您的示例。 (我认为我没错,但是由于无法测试您的数据,可能会出现错误。)您代码中的data
引用了一个文件对象。FP = data["FP"]
引用称为“ FP”的顶级组,依此类推。
将所有组和数据集名称连接在一起,您的对象引用在这里:(我更改了名称以避免与'FP'的第一个值冲突)FP_arr = data["/FP/OMS/fp2D"]["FP"]
方法1显示了如何获取引用的对象。您从那里所做的工作取决于找到的数据。
fp2d["FP"] or data["/FP/OMS/fp2D"]["FP"]
是对象引用的数组。将对象引用与文件对象结合起来以获取下一个对象。因此,使用您的命名:obj_ref=fp2d["FP"][0][0]
是第一个对象参考。data[ fp2d["FP"][0][0] ]
或data[obj_ref]
返回第一个对象。
您可以使用.name
属性打印此对象的路径。对于上述对象:obj_ref_name = data[obj_ref].name
print( obj_ref_name )
您可以通过比较三种访问引用对象的方式来了解其工作原理。以下各行指向同一对象,并应产生相同的输出:data[ fp2d["FP"][0][0] ]
data[obj_ref]
data[obj_ref_name]
然后您可以使用它继续查询数据。
附带说明:对象引用很难。当我第一次盯着他们工作时,我使用HDFView打开HDF5文件以“查看”发生了什么。用这种方式更容易理解。