matlab读.h5文件

之前用 python 给 nuswide 提取了 VGG19 特征,因为文件太大,超过 .mat 限制,存成 .h5,见 [1]。现在一个 matlab 程序要读,可以用 h5disp 查看 .h5 文件内容的结构(各个 datasets),然后用 h5read 读。

注意两点:

  • 文件名、dataset 的类型要是 char 而能是 string,否则报错。可以用 c = char(s) 将 string 转成 char
  • 好像被自动转置了一次?我当初存的时候应该是 n × d n\times d n×d 的,但读出来的时候变成 d × n d\times n d×n 了(不知道是 h5py[1] 在存的时候自己转了,还是 matlab 读的时候自己转的)

Code

% "双"引号 是 string,会报错
% F = "datasets/nuswide-tc10/images.nuswide.vgg19.4096d.h5";
% '单'引号 是 char(数组),可以
F = 'datasets/nuswide-tc10/images.nuswide.vgg19.4096d.h5';

% 打印文件内结构
h5disp(F);

% 读
images = h5read(F, '/images');  % dataset name 也要用****引号 char
fprintf("images:"), disp(size(images));  % (4096, 269648)
  • 输出
HDF5 images.nuswide.vgg19.4096d.h5 
Group '/' 
    Dataset 'images' 
        Size:  4096x269648
        MaxSize:  4096x269648
        Datatype:   H5T_IEEE_F32LE (single)
        ChunkSize:  []
        Filters:  none
        FillValue:  0.000000

images:        4096      269648

References

  1. h5py存取简例
  2. Importing HDF5 Files
  3. 利用matlab读取.h5文件内容
### 如何在不同平台上打开 H5 文件 #### 使用 Python 打开 H5 文件 在 Python 中,`h5py` 是最常用的库之一来操作 HDF5 文件。通过 `h5py.File()` 方法可以轻松地打开 `.h5` 文件并对其进行写操作[^1]。 以下是使用 `h5py` 库的一个基本示例: ```python import h5py # 打开现有的 .h5 文件(只模式) file_path = 'example_file.h5' f = h5py.File(file_path, 'r') # 列出文件中的所有主键(数据集名称) keys = list(f.keys()) print("Keys in the file:", keys) # 访问特定的数据集 if 'dataset_name' in f: dataset = f['dataset_name'] data = dataset[:] print(data.shape) # 输出数据形状 else: print("'dataset_name' not found") # 关闭文件 f.close() ``` 另一种方式是使用 Pandas 的 `HDFStore` 类来处理简单的 `.h5` 数据存储[^3]。 ```python import pandas as pd store = pd.HDFStore('vstoxx_data_31032014.h5', mode='r') print(store.keys()) # 查看所有的键名 data = store.get('/key_to_dataset') # 获取指定路径下的数据集 store.close() # 关闭连接 ``` #### 在 MATLAB 上打开 H5 文件 MATLAB 提供了内置函数 `h5read` 来读取 HDF5 文件的内容[^5]。该函数允许用户指定要加载的具体数据集以及其子区域参数。 下面是一个典型的例子展示如何从 `.h5` 文件中提取所需部分的信息: ```matlab % 定义输入参数 filename = 'testFile.h5'; datasetname = '/group/subgroup/dataset'; % 调用 h5read 函数获取整个数据集 data_full = h5read(filename, datasetname); disp(size(data_full)); % 显示大小信息 ``` 如果只需要读取某一部分而非全部,则可以通过设置额外选项实现更精确控制: ```matlab start_position = [1, 1]; % 开始位置索引 (基于 Fortran 风格计数) count_elements = [5, 5]; % 各维度上选取的数量 stride_steps = [2, 2]; % 步幅定义间隔采样率 partial_data = h5read(filename, datasetname, start_position, count_elements, stride_steps); ``` #### 常见错误与解决办法 当尝试运行上述脚本时可能会遇到一些常见问题比如权限不足或者找不到目标节点等问题。对于前者确保传入正确的访问模式字符串如 `'r+'` 表明既可又可修改;而对于后者则需仔细核对实际存在的路径结构是否匹配预期调用形式[^4]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值