使用h5py在Python加载MATLAB数据时维度反转问题及解决
MATLAB文件在Python中加载后维度反转的原因与解决办法
问题场景
用以下Python代码加载MATLAB文件:
import h5py import numpy as np filepath = 'file.mat' arrays = {} f = h5py.File(filepath) for k, v in f.items(): arrays[k] = np.array(v) a = arrays['data'] print(a.shape)
MATLAB中该数据的尺寸为:
>> size(dataset) ans = 64 50 21 2
但Python中输出的尺寸为:
>>> a.shape (2, 21, 50, 64)
维度反转的原因
MATLAB采用**列优先(Fortran顺序)存储数组,而NumPy默认使用行优先(C顺序)**存储。h5py读取MATLAB的HDF5文件时,会直接按照原始存储的维度顺序加载,导致Python中看到的维度和MATLAB里的完全反转。
解决办法
有两种简单的处理方式:
- 直接转置数组
利用NumPy的转置操作T,直接反转维度顺序:a = arrays['data'].T print(a.shape) # 输出 (64, 50, 21, 2),和MATLAB一致 - 读取时指定转置
在读取数组的同时完成转置,避免后续额外操作:
这样for k, v in f.items(): arrays[k] = np.array(v).transpose()arrays['data'].shape会直接和MATLAB中的尺寸匹配。
内容的提问来源于stack exchange,提问作者Demiurg
相关产品推荐
相关产品推荐

