如何在Python中运行MATLAB代码

27

我正在尝试使用Python运行MATLAB代码(我使用的是Python 3.6)。

我不需要传递任何参数或获取任何输出。我只需要一行Python代码,简单地运行MATLAB代码。

我看到了一些在线答案,说要使用matlabroot并在命令提示符中使用它来安装某种引擎,但它说我不能安装它,因为我的Python版本还不够旧(这没有意义)。

是否有更简单的版本或其他方法可以做到这一点?

谢谢!


1
你的电脑上安装了Matlab吗? - pascscha
是的,我有2016b版本。 - ATP
1个回答

32

使用Oct2Py

您的第一个选择是使用Oct2Py,它可以与Octave一起运行,Octave是一个免费且开源的程序,可以运行Matlab文件和函数。只需使用以下终端命令进行安装:

pip3 install oct2py

然后你可以像这样从Python脚本中运行MatLab代码:

from oct2py import Oct2Py
oc = Oct2Py()


script = "function y = myScript(x)\n" \
         "    y = x-5" \
         "end"

with open("myScript.m","w+") as f:
    f.write(script)

oc.myScript(7)

使用MatLab

如果您想使用原始的MatLab引擎,您需要按照以下步骤进行:

1. 安装MatLab库

按照此页面的说明,首先要通过打开MatLab并运行命令matlabroot来找到MatLab根文件夹。这应该会给您Matlab的根文件夹。

然后打开终端(如果您使用的是Windows,可以按Windows + R,然后键入cmd并按Enter)。在终端中运行以下代码:

cd matlabroot\extern\engines\python

请确保用刚才找到的路径替换matlabroot。然后运行

python3 setup.py install

安装MatLab Python库。

2. 使用MatLab库

按照此页面的说明进行操作,然后您可以

import matlab.engine
    
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)

如果您想运行整个脚本,您可以将脚本保存为当前文件夹中的MatLab *.m文件,并像这样运行它们:

import matlab.engine
eng = matlab.engine.start_matlab()
eng.myMatlabFile(nargout=0) # Expects a file named myMatlabFile.m in the same directory

你也可以从Python创建MatLab文件:

import matlab.engine

script = "b = 5;\n" \
         "h = 3;\n" \
         "a = 0.5*(b.* h)"

with open("myScript.m","w+") as f:
    f.write(script)

eng = matlab.engine.start_matlab()
eng.myScript(nargout=0)

我希望这可以帮助您 :)

很奇怪,我也有Python 3.6。但我的Matlab版本是2017b,也许这就是问题所在。 - pascscha
@Julian 你也可以使用 Oct2Py,它是免费和开源的,并且它也有一个 Python 桥接程序 :) 我刚刚更新了我的答案,所以它包括了 Oct2Py 的使用说明。 - pascscha
3
如果有其他人感到困惑,myMatlabFile.m 是实际的文件名,而不是你传递给函数的文件名。因此,如果你的文件名是 foo.m,你需要调用 eng.foo(...) - jds
@gwg 请问你在文件里放了什么?你定义了一些变量吗? - Marine Galantin
OSError: 找不到octave-cli,请参阅README。 - The Singularity
显示剩余15条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接