R2017b之前的版本支持py2.7-py3.5,R2017b以及之后可支持py3.6
安装MATLAB
切换目录至 MATLAB\R2018b\extern\engines\python
,执行命令
1 2 3 4
| #非默认目录下安装,并把安装信息存至D:\MatlabForPython\files.txt python setup.py build --build-base="D:\MatlabForPython" install --record D:\MatlabForPython\files.txt #默认目录下安装 python setup.py install
|
准备工作
matlab文件 getFromMat.m
1 2 3
| function a = getFromMat(x) a=[1 2 3; 4 5 6] x
|
导入包,并启动
1 2
| >>> import matlab.engine >>> eng=matlab.engine.start_matlab()
|
python获取matlab函数的执行结果
需要将得到的值进行转化,才能得到array类型的数据
1 2 3 4 5 6 7 8 9 10 11
| >>> mat=eng.getFromMat(1) a = 1 2 3 4 5 6 x = int64 1
>>> np.array(mat._data).reshape(mat.size[::-1]).T array([[1., 2., 3.], [4., 5., 6.]])
|
将python数据传入matlab函数
1 2 3 4 5 6 7 8 9 10 11
| >>> aa=np.arange(9).reshape(3,3) >>> bb=matlab.int8(aa.tolist()) >>> data=eng.triarea(bb) a = 1 2 3 4 5 6 x = 3x3 int8 矩阵 0 1 2 3 4 5 6 7 8
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import matlab.engine import numpy as np eng=matlab.engine.start_matlab() #得到matlab执行结果,并转化为array数据 mat=eng.getFromMat(1) pymat=np.array(mat._data).reshape(mat.size[::-1]).T
#将array数据转化为matlab.int,并传入matlab引擎 aa=np.arange(9).reshape(3,3) bb=matlab.int8(aa.tolist()) data=eng.triarea(bb)
#关闭matlab引擎 eng.quit()
|