从Python调用MATLAB函数

安装MATLAB引擎API以后,可以直接调用任何MATLAB函数,并将结果返回给Python。例如,下面用引擎调用magic函数,生成3阶魔方矩阵。

code.python
>>> import matlab.engine
>>> eng=matlab.engine.start_matlab()
>>> tf=eng.magic(3)
>>> print(tf)
 [[8.0,1.0,1.0],[3.0,5.0,7.0],[4.0,9.0,2.0]]

返回3阶魔方矩阵。

从引擎调用函数时,默认时引擎返回单个输出变量。如果已经知道函数返回多个变量,使用nargout变量指定输出变量的个数。

下面用eig函数求矩阵的特征值和特征向量。设置nargout变量,从eig函数返回2个输出变量,分别保存特征值矩阵和特征向量矩阵。

code.python
>>> import matlab.engine
>>> eng=matlab.engine.start_matlab()
>>> A=matlab.double([[1,2,0],[2,5,-1],[4,10,-1]])
>>> t=eng.eig(A,nargout=2)
>>> print(t)
	(matlab.double([[-0.24401693585629244,-0.9106836025229589,0.4472135954999575],[-0.333333333333333,0.3333333333333331,3.0337068460183253e-16],[-0.9106836025229591,-0.24401693585629367,0.8944271909999162]]), matlab.double([[3.7320508075688745,0.0,0.0],[0.0,0.2679491924311226,0.0],[0.0,0.0,0.999999
9999999999]]))

如果函数没有返回变量,将nargout设置为0。下面从Python打开MATLAB帮助浏览器。

code.python
>>> import matlab.engine
>>> eng=matlab.engine.start_matlab()
>>> eng.doc(nargout=0)

MATLAB的doc函数打开浏览器,但是不返回输出变量。如果不指定nargout=0,引擎将抛出一个错误。

同时按下Ctrl和C键,停止MATLAB函数的执行。控制权交给Python。

在函数结束前停止执行,调用future.cancel()。