arcgis engine 并非所有的代码都有返回值_Pycharm中调用Matlab代码


tags: Python,Matlab,混合编程


环境:Windows10,Matlab R2018,Pycharm

1. 安装
新建python工程,工程目录为 E:untitled Matlab为Python提供了专门的Matlab引擎,在Pycharm中打开Terminal,定位到Matlab引擎所在的目录:

f6d3d529cda25e1f6f0ad3aebc44f3a5.png
Pycharm的Terminal位于界面的左下角,与Anaconda Prompt具有相同的功能,可以执行pip命令

本人的目录为 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源程序文件,具体如下:

d359e963c94c1cb761882e1fa264b859.png
matlab源程序文件与python源程序文件处于同一目录下即可


文件名为test01.m,写入如下代码:

function a=test01(a,b) 
a=0.5*(a+b)


python中调用:

engine.test01(1.,2.)
  1. 注意事项

(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()

运行结果附图:

508a305d775136df98c21c459f6ff761.png
结合调用m文件、输入数据转换、返回值个数控制与输出数据转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值