【问题标题】:How to run MATLAB code from within Python如何在 Python 中运行 MATLAB 代码
【发布时间】:2018-12-26 15:04:56
【问题描述】:

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

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

我在网上看到一些答案说要使用 matlabroot 并在命令提示符中使用它来安装某种引擎,但它说我无法安装它,因为我的 Python 版本不够旧(这使得没有感觉)。

是否有更简单的版本或只是另一种方法?

谢谢!

【问题讨论】:

  • 你的电脑上安装了 Matlab 吗?
  • 是的,我有 2016b 版本

标签: python matlab


【解决方案1】:

使用 Oct2Py

​​>

您的第一个选择是使用与Octave 一起运行的 Oct2Py,这是一个可以运行 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 库

按照this page 的说明,您首先必须通过打开 MatLab 并运行命令matlabroot 来找到您的 MatLab 根文件夹。这应该为您提供 Matlab 的根文件夹。

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

cd matlabroot\extern\engines\python

确保将 matlabroot 替换为您刚刚找到的路径。然后你运行

python3 setup.py install

安装 MatLab Python 库。

2。使用 MatLab 库

按照this page的指示就可以了

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

如果您想运行entire scripts,您可以将脚本保存为当前文件夹中的 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)

我希望这会有所帮助:)

【讨论】:

  • 感谢您的回复!我在 Mac 上运行它,当我尝试运行 python3 setup.py install 我得到这个:OSError: MATLAB Engine for Python support Python version 2.7, 3.3, 3.4 and 3.5, but your version of Python is 3.6
  • 这很奇怪,我也有 Python 3.6。但我的 Matlab 版本是 2017b,也许这就是问题所在。
  • MathWorks 说 Python 3.6 很好,Matlab 版本应该是 2014b 或更高版本,而我的是……呃
  • @Julian 您也可以只使用 Oct2Py,它是免费和开源的,而且它也有一个 python 桥 :) 我刚刚更新了我的答案,所以它包含了 Oct2Py 的说明
  • 如果其他人感到困惑,myMatlabFile.m 是实际的文件名。这不是您将文件名传递给的函数。所以如果你的文件是foo.m,你就调用eng.foo(...)
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多