tags: Python,Matlab,混合编程
环境:Windows10,Matlab R2018,Pycharm
1. 安装
新建python工程,工程目录为 E:untitled Matlab为Python提供了专门的Matlab引擎,在Pycharm中打开Terminal,定位到Matlab引擎所在的目录:
本人的目录为 F:matlabexternenginespython,其中extern前是matlab安装目录,后续是固定目录 输入python setup.py install
安装Matlab引擎
2. 导入Matlab引擎与使用
输入如下命令导入matlab.engine :
import matlab
import matlab.engine
matlab函数在python调用中,首先需要启动一个engine,通过engine去启动matlab函数,也可以启动多个引擎来,启动多个计算,也可以使用非同步启动等方式,这些在官网中都有说明: [https://ww2.mathworks.cn/help/matlab/matlab_external/start-the-matlab-engine-for-python.html]
engine = matlab.engine.start_matlab() #启动matlab
(1)调用matlab系统函数
engine.sqrt(matlab.double([1.,2.,3.,4.,5.]))
(2)调用m文件
在工程目录(python源程序文件同目录)下新建matlab源程序文件,具体如下:
文件名为test01.m,写入如下代码:
function a=test01(a,b)
a=0.5*(a+b)
python中调用:
engine.test01(1.,2.)
- 注意事项
(1)数据类型差异 engine传入时,需要将python的数据类型转换成matlab可用。 以常用的numpy数组为例: a = np.array([[1,2],[3,4]])
,传入时需要使用matlab.double(a.tolist)
的形式, 同时engine的输出也是matlab对象,需要进行一定的处理。
测试代码如下:
a = np.array([[1,2],[3,4]])
b = np.array([[1,1],[1,1]])
c = np.array(engine.test01(matlab.double(a.tolist()),matlab.double(b.tolist()),nargout=1))
print(c)
(2)返回值个数
如上述代码中nargout=1,对应test01函数返回值个数,默认为1个,0个或多个返回值需要对应修改,否则会报错
(3)资源回收
engine.exit()
运行结果附图: