python调用matlab函数_python中调用matlab

最近一个工程中要调用一个matlab的大函数,实在是不想重新写,就简单的用python调用了matlab。版本匹配

我用的环境是Python 3.6.6 matlab 2018b,python的版本和matlab的版本必须匹配,在matlab 2018b中支持的python版本是3.4 3.5 3.6,2.7支不支持暂时没查到。

要是不清楚你的matlab版本支持的python版本的话,接下来我们会谈到

安装用于 Python 的 MATLAB 引擎 API​ww2.mathworks.cn

这是官方的一个教程,其中提到:在安装之前,确认您的 Python 和 MATLAB 配置。

您的系统具有受支持的 Python 版本和 MATLAB R2014b 或更新版本。要检查您的系统上是否已安装 Python,请在操作系统提示符下运行 Python。

将包含 Python 解释器的文件夹添加到您的路径(如果尚未在该路径中)。

找到 MATLAB 文件夹的路径。启动 MATLAB,并在命令行窗口中键入 matlabroot。复制 matlabroot 所返回的路径。

2. 安装

在上一部找到的matlabroot路径中,执行以下操作在 Windows 系统中 -

cd "matlabroot\extern\engines\python"

python setup.py install在 Mac 或 Linux 系统中 -

cd "matlabroot/extern/engines/python"

python setup.py install

如果在conda里面安装的话,请提前启动conda环境。

注意此步需要管理员权限的CMD,如果没有的话,参照此文:在非默认位置安装用于 Python 的 MATLAB 引擎 API​ww2.mathworks.cn

如果import matlab.engine时出现了ImportError: No module named matlab.engine,参考Python和matlab混编时,遇到问题:ImportError: No module named matlab.engine"的解决方法​blog.csdn.netv2-d04aed4649f49db4ae07ab235a973638_180x120.jpg

总结就是

python setup.py build --build-base="builddir" install

python setup.py install --prefix="installdir"

python setup.py build --build-base="builddir" install --prefix="installdir"

python setup.py install --user

3. 调用

一定要在python中先写入

import matlab

import matlab.engine

尝试过只import matlab然后调用matlab.engine然后报错了,其中matlab是用来做数据转换等工作,matlab.engine是用来调用函数的。

所有要送给python中调用的matlab的数据,需要使用matlab(就是刚刚import的)转换,如:MATLAB 数组作为 Python 变量​ww2.mathworks.cn

比较有趣的是有一点,即使是数值,而非序列需要传送给matlab的函数,也需要用list或者tuple包一下才可以。initializer 必须是 Python 序列类型,例如 list、tuple 或其他序列类型。可选的 size 输入参数根据序列来设置数组大小

对于complex也有专门的方法转换,这个我没试过,不过官方说明有提到:您可以通过指定 initializer 包含多个数字序列或通过指定 size 为多维来创建多维数组。通过将可选的 is_complex 输入参数设置为 True,可以创建复数 MATLAB 数组。matlab 包提供了下表中列出的 MATLAB 数组构造函数

matlab函数在python调用中,首先需要启动一个engine,通过engine去启动matlab函数,也可以启动多个引擎来,启动多个计算,也可以使用非同步启动等方式,在官网中都有说明:启动和停止用于 Python 的 MATLAB 引擎​ww2.mathworks.cn使用完了关闭就是了

使用完请通过eng.exit()停止,我用的eng.quit()总会报错。

Matlab输出的数据也是matlab自己的一个object,需要通过numpy转换回来,这点也要注意下

另外一些有用的信息如下:指定输出个数

默认情况下,API认为接收函数返回结果的参数有1个。这会导致没有返回值的函数在被调用时报错:“Too many output arguments”或是其他类似的信息。我们可以人为指定输出参数为0个来避免这样的错误。

>>> playblocking(player) # playblocking is a MATLAB function with no returns

Error using playblocking

Too many output arguments

>>> playblocking(player, nargout=0)

# Success!

123456

来源:如何在Python中调用MATLAB - OddNo77的博客 - CSDN博客​blog.csdn.netv2-a411274dd97af133ee3b05a61bb46e31_180x120.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值