1. 确认安装好了matlab和python
2. 安装MATLAB Engine API for python
Windows:
cd "matlabroot\extern\engines\python"
python setup.py install
Mac/Linux:
cd "matlabroot/extern/engines/python"
python setup.py install
其中 matlabroot是你安装matlab文件的本地地址,而且是特定版本文件夹下,例如我的是D:\Applications\MATLAB\R2018a
3. 用Python调用matlab脚本或者函数
调用function
matlab function文件名为testmatlab.m,内容为:
function test = testmatlab(a,b)
c = 0.5*(a.*b);
python文件中调用时语句:
import matlab.engine
eng = matlab.engine.start_matlab()
ret = eng.testmatlab(1.0,5.0)
print(ret)
输出结果为2.5。
调用脚本
调用脚本时需要注明”nargout=0”,假如testmatlab.m是一个脚本文件,在python代码中就要这样写:
eng.testmatlab(nargout=0)
否则报错
SyntaxError: Error: The expression to the left of the equals sign is not a valid target for an assignment.
参考链接:Matlab文档-通过Python调用用户脚本和函数
python于matlab间数据转换问题
在实际应用时,我希望传入matlab function的是矩阵和数组,但是由于我的原数据是numpy.ndarray格式的,matlab不支持,所以会有如下报错:
TypeError: 不受支持的 Python 数据类型: numpy.ndarray
这是因为数据是通过eng.workspace[‘var_name’]来传递的。但是,不能将numpy.ndarray(比如:二维图像)直接赋值给workspace。比如以下代码就将报错:
img=np.zeros((100,100),dtype=np.int)
eng.workspace['img']=img
解决方案:
将数据保存为mat类型(参考 如何在python中读写和存储matlab的数据文件(*.mat)),然后使用load载入数据。