如何在 Python 数据处理项目中调用数学计算软件 Matlab 中函数和方法(详细教程)

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数据处理案例

待更新 · · · · · ·

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唤醒手腕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值