企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 安装 安装最新版的Matlab, ```matlab matlabroot ``` 会返回Matlab root路径,复制此路径,将它记作A。在命令行中: ```shell cd A/extern/engines/python python setup.py install ``` 安装`matlab.engine`包。此时在python中可以调用m函数: ## 使用 #### 简单的例子 在您的当前文件夹中名为 triarea.m 的文件中创建一个 MATLAB函数。 ```matlab function a = triarea(b,h) a = 0.5*(b.* h); ``` ```python import matlab.engine eng = matlab.engine.start_matlab() ret = eng.tri(1.0,5.0) ``` 注意,`matlab.engine`里面主要就是`start_matlab()`方法。 #### 通过 Python 调用 MATLAB 函数 从 MATLAB 函数返回输出参数 您可以直接调用任何 MATLAB® 函数并将结果返回到 Python®。例如,要确定某个数是否为质数,请使用该引擎调用 isprime 函数。 ```python import matlab.engine eng = matlab.engine.start_matlab() tf = eng.isprime(37) print(tf) True ``` 从 MATLAB 函数返回多个输出参数 当使用引擎调用函数时,默认情况下该引擎会返回单个输出参数。如果您知道函数可能返回多个参数,请使用 nargout 参数指定输出参数的数量。 要确定两个数的最大公分母,请使用 gcd 函数。设置 nargout 以从 gcd 返回三个输出参数。 ```py import matlab.engine eng = matlab.engine.start_matlab() t = eng.gcd(100.0,80.0,nargout=3) print(t) (20.0, 1.0, -1.0) ``` 不从 MATLAB 函数返回任何输出参数 有些 MATLAB 函数不会返回任何输出参数。如果函数不返回任何参数,则将 nargout 设为 0。 通过 Python 打开 MATLAB 帮助浏览器。 ```py import matlab.engine eng = matlab.engine.start_matlab() eng.doc(nargout=0) ``` MATLAB doc 函数将打开浏览器,但不会返回输出参数。如果您没有指定 nargout=0,引擎将报告错误。 #### 在 Python 中使用 MATLAB 数组 matlab 包提供了构造函数以支持在 Python 中创建 MATLAB 数组。用于 Python 的 MATLAB 引擎 API 可以将此类数组作为输入参数传递给 MATLAB 函数,并且可以将此类数组作为输出参数返回给 Python。您可以从 Python 序列类型创建任何 MATLAB 数值或逻辑值类型的数组。 从 Python list 创建一个 MATLAB 数组。对该数组调用 sqrt 函数。 ```py import matlab.engine eng = matlab.engine.start_matlab() a = matlab.double([1,4,9,16,25]) b = eng.sqrt(a) print(b) [[1.0,2.0,3.0,4.0,5.0]] ``` 引擎返回 b,它是 1×5 的 matlab.double 数组。 创建一个多维数组。magic 函数将一个二维 matlab.double 数组返回给 Python。使用 for 循环分行打印数组中的每行。(当看到 ... 提示时再次按 Enter 以关闭循环并打印。) ```py a = eng.magic(6) for x in a: print(x) ... [35.0,1.0,6.0,26.0,19.0,24.0] [3.0,32.0,7.0,21.0,23.0,25.0] [31.0,9.0,2.0,22.0,27.0,20.0] [8.0,28.0,33.0,17.0,10.0,15.0] [30.0,5.0,34.0,12.0,14.0,16.0] [4.0,36.0,29.0,13.0,18.0,11.0] ``` 调用 tril 函数来获取 a 的下三角部分。在一个单独的行上打印数组中的每行。 ```py b = eng.tril(a) for x in b: print(x) ... [35.0,0.0,0.0,0.0,0.0,0.0] [3.0,32.0,0.0,0.0,0.0,0.0] [31.0,9.0,2.0,0.0,0.0,0.0] [8.0,28.0,33.0,17.0,0.0,0.0] [30.0,5.0,34.0,12.0,14.0,0.0] [4.0,36.0,29.0,13.0,18.0,11.0] ``` matlab数组在python中是list或者tuple。