Matlab与Python交互:Python模型在Matlab中的调用


Matlab具有强大的数据处理能力,提供了大量工具箱,满足各类数值计算需求,且自成体系。而Python则更加开放、自由,基于提供的基本语法,大家可以自由创造轮子,发布后就可以直接pip安装使用。Matlab偏向数值计算,而Python覆盖面则更加广泛,资源更多、更新更快。所以借助Python增强Matlab的能力,好比Matlab插上Python的翅膀,如虎添翼。

环境检查

使用pyversion检查Matlab能否调用Python:

pyversion version: '3.6' executable: 'f:\Anaconda3\python.EXE' library: 'f:\Anaconda3\python36.dll' home: 'f:\Anaconda3' isloaded: 01.2.3.4.5.6.

如果列出了Python信息,如版本、路径等,表示能正常检测到Python。其中isloaded表示是否已加载Python,如果执行了Python语句或调用了Python模块,isloaded就变为1:

py.print('sdf') sdf >> pyversion version: '3.6' executable: 'f:\Anaconda3\python.EXE' library: 'f:\Anaconda3\python36.dll' home: 'f:\Anaconda3' isloaded: 11.2.3.4.5.6.7.8.

如果Matlab没有找到Python,则返回为空,这主要是由于Python路径未添加到环境变量所致

pyversion version: '' executable: '' library: '' home: '' isloaded: 01.2.3.4.5.6.

解决办法:将Python安装目录添加到环境变量,或者直接指定Python可执行文件的路径

pyversion('f:\Anaconda3\python.exe') >> pyversion version: '3.6' executable: 'f:\Anaconda3\python.EXE' library: 'f:\Anaconda3\python36.dll' home: 'f:\Anaconda3' isloaded: 01.2.3.4.5.6.7.

简单调用

最简单的调用方式是直接执行Python语句

py.print('Hello, Python!') Hello, Python! >> py.sys.path ans = Python list (不带属性)。 ['', 'f:\\Anaconda3\\python36.zip', 'f:\\Anaconda3\\DLLs', ...] >> py.list([1,2]) ans = Python list (不带属性)。 [1.0, 2.0]1.2.3.4.5.6.7.8.9.10.

函数调用

除此之外,还可以编写自己的Python函数,如

myfun.py def test(): print('Hello, Matlab!') def add(a, b): c = a + b return c1.2.3.4.5.6.

将Matlab切换到myfun.py所在的目录,调用Python函数

py.myfun.test() Hello, Matlab! >> py.myfun.add(1,2) ans = 31.2.3.4.5.

注意:如果修改了myfun.py,Matlab不会立即使用新的代码,需要重载Python模块

重载Python模块 clear classes obj = py.importlib.import_module('myfun'); py.importlib.reload(obj);1.2.3.4.

执行上面语句后,就可以调用修改过的Python代码了。

类调用

上面是调用Python函数,还可以调用Python类,如:

class myclass(): def __init__(self): self.count = 0 def add(self): self.count = self.count + 1 print('count = ', self.count)1.2.3.4.5.6.

Matlab中执行

count = 1 count = 2 count = 3 count = 4 count = 51.2.3.4.5.

结果

Matlab向Python传递参数

单值传递:在py.myfun.add(1, 2)中,1和2在Matlab中默认是double型,传入Python后,Python默认将其转为Python的float型。类型转换如下表


数组传递:如果传入Matlab数组,Python默认接收为array.array类型。如Matlab传入数组[1, 2],Python接收为array.array('d', [1.0, 2.0])。更多数组转换如下表


如果习惯使用numpy,可以使用np.array(arg_py)将array.array转为numpy数组。

Matlab接收Python返回值

单值转换:如果Python返回1.2(默认float),Matlab无需转换,直接接收为double型的1.2


默认转换的只有以上几种,其他类型需要自己手动转换。如Python中的str,传回Matlab后,如果不做转换,很难操作:

登录后复制 res = Python str (不带属性)。 Hello, Matlab!1.2.3.

故可以调用string、char转换为Matlab字符串:string(res)或char(res)。其他类型的转换方式如下表


数组传递:可以使用array.array向Matlab返回数组,如

def calc(): return array.array('d', [1, 2]) 在Matlab中 >> a = double(py.myfun.calc()) a = 1 21.2.3.4.5.6.

numpy数组不方便在Matlab中使用,所以可以先在Python中转为array.array,再传递给Matlab

a = np.array([1,2,3]) # numpy数组 b = array.array('d', a) # 转为array1.2.

以上就是MATLAB调用python文件以及调用.exe文件方法。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空