python版本和Matlab版本对应的关系,python调用matlab

调用的话参考

https://blog.csdn.net/m0_37316917/article/details/90256563

https://zhuanlan.zhihu.com/p/67127872

注意的是python和matlab版本有对应关系,我下载了matlab2010和2014,前者没有engines文件夹,后者只支持python2.7和3.3!

已知matlab2017b支持python3.6    ~下载对应破解版,安装matlab后再参考调用的文章.

 

环境:Windows10,Matlab R2018,Pycharm

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

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

本人的目录为 F:\matlab\extern\engines\python,其中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源程序文件,具体如下:

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

运行结果附图:

结合调用m文件、输入数据转换、返回值个数控制与输出数据转换

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值