使用h5py读取Mat文件时,如何保留Matlab原矩阵维度?
问题:h5py读取Mat文件后矩阵维度与Matlab不一致
Matlab中名为u的矩阵尺寸为(155,142,5000),但使用h5py加载后,矩阵被转为一维形式,size值为总元素数110050000,无法保留原维度。
原代码:
import numpy as np import h5py Data_Main = h5py.File('mesh_07ms_velocity.mat','r') print(Data_Main.keys()) u = Data_Main.get('u') u = np.array(u) print(u.size)
代码输出:
<KeysViewHDF5 ['u', 'w', 'x', 'z']> 110050000
解决方案
原因
Matlab采用列优先存储多维数组,而h5py按HDF5文件的原始存储顺序读取,直接转为numpy数组时会因为存储顺序差异导致维度错乱,甚至被展平。
方法1:转置数组恢复维度
读取后直接转置即可匹配Matlab的维度:
import numpy as np import h5py Data_Main = h5py.File('mesh_07ms_velocity.mat','r') u = Data_Main['u'][:].T # 先切片获取完整数组,再转置 print(u.shape) # 输出 (155,142,5000)
方法2:用scipy.io.loadmat自动处理
scipy.io.loadmat会自动处理Matlab和Python的存储顺序差异,无需手动调整:
from scipy.io import loadmat data = loadmat('mesh_07ms_velocity.mat') u = data['u'] print(u.shape) # 直接得到 (155,142,5000)
方法3:手动检查并调整维度
如果转置后维度仍不符合预期,先查看h5py读取的原始形状:
print(Data_Main['u'].shape)
根据输出的原始形状,通过transpose()指定维度顺序,比如原始形状是(5000,142,155),则:
u = Data_Main['u'][:].transpose(2,1,0)
内容的提问来源于stack exchange,提问作者ROOZBEH EHSANI
相关产品推荐
相关产品推荐

