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

使用Scipy加载.mat文件时出现TypeError错误求助

解决.mat文件加载报错:TypeError: Expecting miMATRIX type here

问题背景

我有一个.mat文件,内部存储的是一个Python字典,包含以下键:

  • "dt":仿真的时间步长
  • "x":网格每个点的x坐标矩阵
  • "y":网格每个点的y坐标矩阵
  • "u":各时刻网格点的纵向速度三维数组
  • "v":各时刻网格点的垂直速度三维数组

尝试用scipy.io.loadmat加载文件,代码如下:

from scipy.io import loadmat
data = loadmat('/Users/simograbzi/PythonProjects/wake_Re500.mat')
print(data)

运行后出现报错:

File ~/PythonProjects/untitled0.py:10 in <module>
    data = loadmat('/Users/simograbzi/PythonProjects/wake_Re500.mat')

File ~/opt/anaconda3/lib/python3.9/site-packages/scipy/io/matlab/mio.py:226 in loadmat
    matfile_dict = MR.get_variables(variable_names)

File ~/opt/anaconda3/lib/python3.9/site-packages/scipy/io/matlab/mio5.py:312 in get_variables
    hdr, next_position = self.read_var_header()

File ~/opt/anaconda3/lib/python3.9/site-packages/scipy/io/matlab/mio5.py:271 in read_var_header
    raise TypeError('Expecting miMATRIX type here, got %d' % mdtype)

TypeError: Expecting miMATRIX type here, got 825375027

解决方法

这个报错的核心原因是:你要加载的.mat文件并非标准MATLAB格式,而是用Python序列化工具(比如pickle)保存的字典,scipy.io.loadmat仅支持标准MATLAB生成的.mat文件,无法识别这种非标准格式。

尝试以下几种方案:

方案1:用pickle加载

如果文件是用Python的pickle保存的,直接用pickle读取:

import pickle
# 以二进制只读模式打开文件
with open('/Users/simograbzi/PythonProjects/wake_Re500.mat', 'rb') as f:
    data = pickle.load(f)
# 验证加载结果
print(data.keys())

方案2:用numpy加载

如果文件是用numpy.save保存的,使用numpy加载并转换为字典:

import numpy as np
data = np.load('/Users/simograbzi/PythonProjects/wake_Re500.mat', allow_pickle=True).item()
print(data.keys())

方案3:确认文件类型

可以通过终端命令查看文件的实际类型,判断用哪种工具加载:

file /Users/simograbzi/PythonProjects/wake_Re500.mat

如果输出包含Python pickle,则用方案1;如果是NumPy data file,则用方案2。


内容的提问来源于stack exchange,提问作者simogbz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:50:39