如何在Python数据处理项目中,调用数学计算软件Matlab中的函数和方法

如何在Python数据处理项目中,调用数学计算软件Matlab中的函数和方法,第1张

Python调用Matlab官方简介

在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引擎获取库包

首先找到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安装成功的:

调用Matlab案例测试

我们这边采用的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引擎

使用启动选项启动引擎

启动引擎,并将选项作为输入参数字符串传递给 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数据处理案例

待更新 · · · · · ·

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/715717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存