在python中调用matlab函数

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载入数据。

    原文作者:苏啦啦哇咔咔
    原文地址: https://www.jianshu.com/p/4e9b06ce3f40
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞