You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:55:16