在Python中能否调用Matlab的函数或者方法,官网Math work给出了答案,展示如下:
具体意思:Python的MATLAB引擎API为Python提供了一个包,可以调用MATLAB作为计算引擎。该引擎支持引用实现(CPython)。有关支持的版本信息,请参见与MATLAB产品兼容的Python版本。
-
要安装和启动引擎,请参见使用Python的MATLAB引擎API入门。
-
要从MATLAB调用Python函数,请参阅从MATLAB调用Python。
引擎应用程序需要安装版本的MATLAB;您不能在只有MATLAB运行时的计算机上运行MATLAB引擎。
Python Functions 和 Matlab Functions
首先找到Matlab所提供的engine引擎的位置,就是Matlab安装目录下,extern/engines/python下,我这边话,展示如下所示:
外部变量(extern):指在函数外部定义的变量,也称全局变量。
当然我们可以发现,Matlab提供的engine不止python,还有Java,所以其实java也可以调用Matlab的相关函数与方法,python提供的setup.py安装文件,java上提供的是jar包。
然后在setup.py所在的目录下,打开cmd控制台,进行setup install:
python setup.py install
发现报错了,原来我的Matlab版本是2021a,2021a是不支持python 3.9版本的,大家可以看到下面的报错,而Matlab2022a是支持python 3.9。
很显然,解决方案:1. 重新装个2022a的matlab 2. 安装python 3.8
是个人都知道,安装Matlab远远比安装个python环境要耗时间的多,我就选择安装低版本的python环境。
安装python3.8成功后,我这边就不配置环境变量,直接使用:
D:\Matlab2021\R2021a\extern\engines\python>E:\Environment\python3.8\python.exe setup.py install
出现如下的画面说明是install安装成功的:
我们这边采用的pycharm编译器,首先我们需要把我们的编译器的python环境版本改成Matlab兼容的版本,我们原来设置的是3.9版本,但是matlab不支持3.9,我们这边需要改成3.8版本。
刚才我们进行setup.py的安装,会发现目录下面生成了build文件夹,这里面就有我们需要的matlab库。等会创建完项目我们会进行使用。
我们创建完项目之后,会有venv虚拟环境目录,把我们matlab库文件夹剪切到site-packages目录下即可,这个目录就是存放我们python第三方库文件的目录:
再main.py编写案例代码,进行测试:
import matlab.engine
import os
engine = matlab.engine.start_matlab()
# 通过调用 start_matlab 启动新的 MATLAB® 进程。 获取 *** 作engine引擎
data = engine.fspecial('gaussian', matlab.double([50, 50]), 3.0)
# 接受数据
engine.mesh(data)
# 调用mesh方法,进行绘图
os.system('pause')
# 暂停 *** 作,不然python运行结束,就会关闭了
运行结果展示如下所示:可以发现跳出是matlab的figure窗口
使用启动选项启动引擎
启动引擎,并将选项作为输入参数字符串传递给 matlab.engine.start_matlab。
例如,随桌面启动 MATLAB:
eng = matlab.engine.start_matlab("-desktop")
例如,启动桌面并将数值显示格式设置为 short:
eng = matlab.engine.start_matlab("-desktop -r 'format short'")
异步启动引擎
:以异步方式启动引擎。在 MATLAB 启动时,在 Python 命令行中编写如下:
import matlab.engine
future = matlab.engine.start_matlab(async=True)
获取matlab函数返回参数
您可以直接调用任何 MATLAB® 函数并将结果返回到 Python®。例如,要确定某个数是否为质数,请使用该引擎调用 isprime 函数。
import matlab.engine
eng = matlab.engine.start_matlab()
res = eng.isprime(111)
print(res) # False
# Connected to pydev debugger (build 213.5744.248)
当使用引擎调用函数时,默认情况下该引擎会返回单个输出参数。如果您知道函数可能返回多个参数,请使用 nargout 参数指定输出参数的数量。
要确定两个数的最大公分母,请使用 gcd 函数。设置 nargout 以从 gcd 返回三个输出参数。
import matlab.engine
eng = matlab.engine.start_matlab()
res = eng.gcd(100.0, 80.0, nargout=3)
print(res) # (20.0, 1.0, -1.0)
当然比如通过 Python 打开 MATLAB 帮助浏览器,显然是没有参数返回的,指定nargout=0即可:
import os
import matlab.engine
eng = matlab.engine.start_matlab()
eng.doc(nargout=0)
os.system('pause')
# 暂停 *** 作,不然python运行结束,就会关闭了
MATLAB doc 函数将打开浏览器,但不会返回输出参数。如果您没有指定 nargout=0,引擎将报告错误。
运行后,会打开matlab 帮助浏览器的页面:
若要搜索MATLAB文档,请在“帮助”浏览器中任意页面顶部的搜索框中键入一个表达式。浏览器返回一个搜索结果列表,突出显示与表达式匹配的关键词。
或者,您也可以使用文档搜索功能来搜索文档。例如,搜索那些提到 plot 函数 的页面:
eng.docsearch("plot",nargout=0)
调用matlab数据处理案例
待更新 · · · · · ·
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)