MATLAB 与 Python 混合编程实战指南
介绍 MATLAB 与 Python 混合编程的核心路径,包括 Engine API、Compiler SDK 及文件交互。通过 Python 调用 MATLAB 矩阵运算、MATLAB 调用 Python 机器学习库等实战案例,演示环境配置、代码实现及类型转换。涵盖开发阶段与生产环境部署方案,提供版本兼容、异常处理及性能优化建议,助力开发者打破语言壁垒,提升研发效率。

介绍 MATLAB 与 Python 混合编程的核心路径,包括 Engine API、Compiler SDK 及文件交互。通过 Python 调用 MATLAB 矩阵运算、MATLAB 调用 Python 机器学习库等实战案例,演示环境配置、代码实现及类型转换。涵盖开发阶段与生产环境部署方案,提供版本兼容、异常处理及性能优化建议,助力开发者打破语言壁垒,提升研发效率。

在科学计算领域,MATLAB 和 Python 各有所长。MATLAB 擅长矩阵运算与工程仿真,Python 拥有开源生态与数据科学优势。单一语言难以覆盖全流程需求时,混合编程成为提升效率的关键。
在动手编码前,先理清 MATLAB 与 Python 互调的核心方案,不同场景适配不同技术:
| 技术方案 | 适用场景 | 性能 | 部署复杂度 | 核心优势 |
|---|---|---|---|---|
| MATLAB Engine API | Python 调用 MATLAB 函数(开发阶段) | 高 | 低(需装 MATLAB) | 调用最直接,支持全量 MATLAB 功能 |
| MATLAB Compiler SDK | MATLAB 代码打包部署(生产环境) | 中 | 中(需运行时) | 无需安装 MATLAB,适合分发 |
| 共享数据文件(HDF5/CSV) | 非实时数据交互 | 低 | 极低 | 无语言依赖,兼容性最好 |
| 第三方库(pymatbridge) | 轻量级 Python 调 MATLAB | 中 | 低 | 无需管理员权限 |
# 进入 MATLAB 安装目录下的 engine 文件夹(以 Windows 为例)
cd "C:\Program Files\MATLAB\R2023a\extern\engines\python"
# 安装 engine
python setup.py install
% 功能:矩阵运算 + 简单统计
% 输入:二维矩阵
% 输出:矩阵的逆、均值、标准差
function[mat_inv, mat_mean, mat_std]=my_matlab_func(mat)
% 异常处理:检查输入是否为矩阵
if ~ismatrix(mat)
error('输入必须为矩阵!');
end
% 计算矩阵的逆(伪逆,避免奇异矩阵报错)
mat_inv = pinv(mat);
% 计算全局均值
mat_mean = mean(mat(:));
% 计算全局标准差
mat_std = std(mat(:));
end
import matlab.engine
import numpy as np
def call_matlab_from_python():
# 1. 启动 MATLAB 引擎(background=True 表示后台运行)
eng = matlab.engine.start_matlab()
# 可选:添加 MATLAB 脚本所在路径
eng.addpath(r'C:\your_matlab_script_path', nargout=0)
# 2. 构造测试数据(Python 数组转 MATLAB 矩阵)
np_mat = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64)
# 转换为 MATLAB 可识别的矩阵格式
mat_mat = matlab.double(np_mat.tolist())
try:
# 3. 调用 MATLAB 函数(参数和返回值需匹配)
mat_inv, mat_mean, mat_std = eng.my_matlab_func(mat_mat, nargout=3)
# 4. 结果转换与输出(MATLAB 类型转 Python/numpy)
print("原始矩阵:")
print(np_mat)
print("\nMATLAB 计算的矩阵伪逆:")
print(np.array(mat_inv))
print(f"\n矩阵均值:{mat_mean:.2f}")
print(f"矩阵标准差:{mat_std:.2f}")
except Exception as e:
print(f"调用出错:{e}")
finally:
# 5. 关闭 MATLAB 引擎(必须释放资源)
eng.quit()
if __name__ == "__main__":
call_matlab_from_python()
原始矩阵: [[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]]
MATLAB 计算的矩阵伪逆: [[-0.4815 -0.1481 0.1852] [-0.0741 -0.0000 0.0741] [ 0.3333 0.1481 -0.0370]]
矩阵均值:5.00
矩阵标准差:2.58
nargout:必须指定返回值数量,否则 MATLAB 默认返回 1 个结果numpy.array 需先转 list 再转 matlab.doubleeng.quit() 必须执行,否则会残留 MATLAB 进程% 查看已识别的 Python 版本
pyversion
% 手动指定 Python 路径(如需要)
pyversion('C:\Python39\python.exe')
# 功能:用 sklearn 做简单的线性回归
import numpy as np
from sklearn.linear_model import LinearRegression
def linear_regression_demo(x_data, y_data):
""" 线性回归预测
:param x_data: 自变量(二维数组)
:param y_data: 因变量(一维数组)
:return: 模型系数、截距、预测值
"""
# 数据转换
x = np.array(x_data).reshape(-1,1)
y = np.array(y_data)
# 训练模型
model = LinearRegression()
model.fit(x, y)
# 预测
y_pred = model.predict(x)
# 返回结果(转为列表,方便 MATLAB 解析)
return model.coef_.tolist(), model.intercept_.tolist(), y_pred.tolist()
function call_python_from_matlab()
% 1. 配置 Python 路径(添加脚本所在目录)
py.sys.path.append('C:\your_python_script_path');
% 2. 构造测试数据
x_data = [1,2,3,4,5]; % 自变量
y_data = [2.1,3.9,6.2,7.8,10.1]; % 因变量(近似 y=2x)
try
% 3. 调用 Python 函数
% 注意:MATLAB 数组转 Python 列表需用 num2cell+cell2mat,或直接传数组
[coef, intercept, y_pred] = py.my_python_func.linear_regression_demo(x_data, y_data);
% 4. 结果转换与输出(Python 类型转 MATLAB 类型)
% Python 列表转 MATLAB 数组
coef_mat = cell2mat(py.list(coef));
intercept_mat = double(intercept);
y_pred_mat = cell2mat(py.list(y_pred));
disp('线性回归模型系数:');
disp(coef_mat);
disp(['截距:',num2str(intercept_mat)]);
disp('预测值:');
disp(y_pred_mat);
% 5. 可视化(MATLAB 优势)
plot(x_data, y_data,'o','DisplayName','原始数据');
hold on;
plot(x_data, y_pred_mat,'-r','DisplayName','拟合曲线');
xlabel('X');
ylabel('Y');
title('MATLAB 调用 Python sklearn 线性回归');
legend;
grid on;
catch ME
disp(['调用出错:', ME.message]);
end
end
% 执行函数
call_python_from_matlab();
线性回归模型系数: 2.0020
截距:0.0800
预测值: 2.0820 4.0840 6.0860 8.0880 10.0900
同时会弹出 MATLAB 绘图窗口,显示原始数据点和 Python 拟合的回归曲线。
开发阶段用 MATLAB Engine 很方便,但生产环境部署时,对方往往没有 MATLAB 授权,此时推荐MATLAB Compiler SDK:
deploytool 打包函数为 Python 包# 安装打包后的 MATLAB Python 包
pip install your_matlab_package.whl

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online