做算法迁移的兄弟,肯定被 MATLAB 变量转 Python 整崩溃过。昨天刚把导师的 .mat仿真数据读进 Python,结果矩阵变成了列表,维度全乱了。2026年了,别再以为 x = 5这种简单赋值就是迁移了。MATLAB 和 Python 的核心差异在数据结构和内存逻辑上。今天聊聊怎么把 MATLAB 的矩阵、结构体和元胞数组,无损转成 Python 的 NumPy 和字典。
这是最大的雷区。MATLAB 的矩阵是二维起步的。你定义 A = [1, 2, 3],在 MATLAB 里它是 1×3 的矩阵。
但在 Python 原生列表里,A = [1, 2, 3]是一维数组。
想无缝衔接?必须用 NumPy。
import numpy as np
# MATLAB: A = [1 2 3; 4 5 6; 7 8 9];
A_matlab = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
注意那个双层括号。MATLAB 习惯用空格或逗号分隔列,用分号分隔行。NumPy 则用嵌套的列表 [[]]来表示。另外,MATLAB 的索引从 1 开始,Python 从 0 开始,切片时 A[1:3]在 Python 里只取第 2 和第 3 个,这点千万别搞混。MATLAB 里的 结构体(struct),比如 person.name = 'Tom'; person.age = 30;,在 Python 里完美对应 字典(dict)。

person_py = {'name': 'Tom', 'age': 30}
取值也很简单,person_py['name']就能拿到 'Tom'。
最麻烦的是 元胞数组(Cell Array)。MATLAB 的 C = {1, 'text', [1 2 3]};允许一个数组里塞不同类型的东西。Python 里最接近的就是 列表(List)。C_py = [1, 'text', np.array([1, 2, 3])]
虽然 Python 列表也能装万物,但如果你要对里面的 [1 2 3]做数学运算,记得把它转成 np.array,不然 Python 会把它当普通列表处理,直接报错。.mat读取别傻乎乎地手动复制粘贴数据了。MATLAB 的 .mat文件是跨平台的桥梁。在 Python 里用 scipy.io直接读:
from scipy.io import loadmat
data = loadmat('matlab_data.mat')
# data 是一个字典
A = data['A'] # 取出 MATLAB 里的 A 矩阵
读进来的 A直接就是 NumPy 数组,维度完全保留。这是最稳妥的迁移方式。
MATLAB 转 Python,本质是思维模式的转变。2026年,深度学习、大模型训练都在 Python 生态里,MATLAB 慢慢退居为仿真验证工具。把数据结构和索引逻辑理清楚,你的算法才能在两个平台间自由穿梭。别让数据类型的小坑,挡了你发 Paper 的路。武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。