python调用MATLAB函数代码——从安装到使用
一、安装
- 首先附上官方教程
- 具体操作:
- 找到 MATLAB 文件夹的路径。启动 MATLAB,并在命令行窗口中键入 matlabroot。复制 matlabroot 所返回的路径。
- 在 macOS 或 Linux 操作系统终端:
$ cd "matlabroot/extern/engines/python"
$ python3 setup.py install
此处操作可能需要sudo权限,如 sudo python3 setup.py install; 但使用sudo权限,此时python版本有可能切换到系统默认版本,从而Matlab引擎将编译拷贝到系统自带python版本包中,这不是我们想要的,后面会给出解决办法
3.测试下是否安装成功
$ python3
Python 3.6.8 (default, Apr 8 2019, 21:35:18)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matlab
>>>
没有报错,表明Python已经可调用matalb引擎!!
对于之前搞科研习惯MATLAB编程的同学,终于可以轻松的和Python一起混合编程学习了
二、使用测试
- 新建测试文件夹,利用Matlab写一个.m函数文件保存,如my_sum.m,内容如下:
function a = my_sum(b,c)
a = b + c;
end
- 新建一个python文件-test.py,内容如下:
import matlab.engine as me
eng = me.start_matlab()
ret = eng.triarea(1.0,5.0)
print(ret)
python3 test.py 运行一下:
6.0
- 常用的Matlab引擎API调用命令:点这里
三、问题解决
安装时的默认版本问题:
刚才已经说到,安装Matlab引擎时,需要sudo权限,但是sudo python 默认调用系统自带的python,此时可以修改/etc/sudoers
sudo vim /etc/sudoers
...
Defaults env_reset
Defaults mail_badpass
Defaults secure_path=":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
...
修改 secure_path
Defaults secure_path="/home/zsj/.pyenv/versions/3.6.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
现在 sudo python3 应该就会默认调用用户本地装的Python版本了。
pyenv虚拟环境中使用
现在我的Python 3.6.8已经可以调用MATLAB了,但是现在包安装的路径是 /home/zsj/.pyenv/versions/3.6.8/lib/python3.6/site-packages ;
假如现在 我使用pyenv创建了一个基于Python3.6.8的虚拟环境,那么包的路径应该为 /home/zsj/.pyenv/versions/3.6.8/envs/env3.6.8-0/lib/python3.6/site-packages。
此时可以:
$ cd /.pyenv/versions/3.6.8/lib/python3.6/site-packages
$ vim /home/zsj/.pyenv/versions/3.6.8/envs/env3.6.8-0/lib/python3.6/site-packages/matlab.pth