做科研的兄弟,最近肯定被导师逼着把 MATLAB 代码转 Python 了。学术圈现在清一色转向开源,Python 成了新宠。看着那一堆 .m文件,心里发怵?其实语法逻辑差不多,但有几个致命的坑,踩中了能让你 Debug 一整天。2026年了,别再死磕那些过时的教程了,今天聊聊从 MATLAB 迁移到 Python 的核心差异,尤其是那个让人头大的索引问题。
这是最杀人于无形的坑。MATLAB 索引从 1 开始,而 Python(NumPy)从 0 开始。更变态的是,Python 的切片是“左闭右开”区间。
比如 MATLAB 里 A(2:3)取的是第 2 和第 3 个元素。
Python 里 A[2:3]只取第 3 个元素(索引 2)。
如果你想取第 2 到第 3 个,得写 A[1:3]。
还有负数索引,Python 里 A[-1]直接取最后一个元素,这在 MATLAB 里得写 A(end)。习惯了这个,你会发现处理边界条件爽多了。
MATLAB 生来就是干矩阵的,x = [1,2,3]; y = [2,4,6]; z = x + y,结果就是 [3,6,9]。

Python 原生列表(List)不行。如果你写 x = [1,2,3]; y = [2,4,6]; z = x + y,Python 会给你拼出一个新列表 [1,2,3,2,4,6]。这哪是加法,分明是拼接。
想在 Python 里做矩阵运算,必须用 NumPy 库。
import numpy as np
x = np.array([1, 2, 3])
y = np.array([2, 4, 6])
z = x + y # 这才得到 [3, 6, 9]
记住,在 Python 的科学计算世界里,np.array就是你的 MATLAB 矩阵。MATLAB 里有 Cell(元胞数组),Python 里有 List(列表)。List 比 Cell 更灵活,里面可以随便塞数字、字符串、甚至另一个 List。
Python 还有个奇葩叫 Tuple(元组),用小括号 ()表示。它跟 List 的唯一区别是:Tuple 一旦创建就不能改。比如 (1, 2, 3),你想把 1 改成 4,报错给你看。这在做函数返回值时很有用,防止数据被误伤。
还有 Dictionary(字典),用大括号 {},像查字典一样存数据 {key: value}。这东西在 MATLAB 里没有直接对应物,但在处理 JSON 数据时简直是神器。
代码结构上,MATLAB 用 end结尾,Python 靠缩进(Tab/空格)。没有 end,只有冒号 :和严格的层级对齐。缩进错一格,代码全崩。这强迫症般的整齐,反而让代码看起来清爽。
MATLAB 转 Python 初期肯定会手生,尤其是忘了加 np.前缀的时候。多写几天,你会发现 Python 的生态(Pandas、Matplotlib、Scikit-learn)比 MATLAB 强大太多了。别抗拒变化,拥抱开源,这才是 2026 年工程师的生存之道。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。