目录
跨语言调用python函数(不推荐)
在MATLAB中运行python脚本
附:添加环境变量方法
通过查找发现了两种调用python函数的方法,分别是在MATLAB中调用python的函数等,以及通过MATLAB调起cmd直接运行python脚本,在此更加推荐第二种方法。
主要参考文章:
如何在MATLAB中调用(运行)“用Python写成的函数或脚本”
matlab调用python编译器_【Matlab-Python混编】Matlab调用Python环境检查
跨语言调用python函数(不推荐)
在MATLAB命令行窗口输入:
pyversion
发现由于使用Anaconda管理python,与直接安装python并添加至环境变量不同,所以MATLAB并不能直接识别到python版本。
因此使用:
pyversion('D:\softwares\anaconda3\python.exe')
直接输入python路径,查看python版本,但出现了如下报错:
原来是因为,不同版本的MATLAB对应不同版本的python,对应版本可在此链接查看,对应表格如下图:
我所使用的R2022a版本最高支持python3.9,而我在Anaconda中安装的python版本为3.10,因此,需要安装3.9版本的python,在Anaconda Prompt中输入以下命令:
conda create --name py39 python=3.9
安装python3.9后,再次在MATLAB命令行中输入:
pyversion('D:\softwares\anaconda3\envs\py39\python.exe')
pyversion
即可看到正常识别python版本了:
此时就可以使用如下语句来实现MATLAB中python函数的调用了:
py.print('Hello world!'); % 调用python自有库函数
py.cv2.imshow('MATLAB-src',src); % 调用某个扩展库中的某个函数
在调用python函数后,pyversion命令运行后,isloaded项变为1:
同样地,还可以调用自己编写的py文件中的函数以及调用某个类中的某个成员函数,但由于跨语言,存在自己编写的函数的返回值无法返回至MATLAB中,以及更新py文件后需要清除缓存等问题。
在MATLAB中运行python脚本
本方法需要将Anaconda中python的路径添加至环境变量。
由于跨语言编程互相调用较为繁琐,需要对现有代码进行大量改动,因此,若已有python脚本,则无需执行较为繁琐的MATLAB调用python函数等操作,可使用MATLAB中的函数system()实现,如:
command = 'python test.py';
[status,cmdout] = system(command,'-echo');
其原理为:函数system()启动新的cmd/shell进程->执行cmd命令->退出进程->返回到 MATLAB 进程,有三种使用方法:
status = system(command)
[status,cmdout] = system(command)
[status,cmdout] = system(command,'-echo') % 在MATLAB命令行窗口显示cmd命令行输出
command—准备在cmd中运行的命令;
status—命令执行状态,当命令成功执行时,status 为 0,否则,status 为非零整数。
cmdout—命令执行后的输出信息。
函数system()启动的cmd窗口的默认路径就是m文件所在的路径
如果希望command执行后立即返回m脚本继续执行后续代码,则可以在command最后加上&:
command = 'python test.py &';
[status,cmdout] = system(command,'-echo');
如图所示,在运行python脚本后,isloaded并没有变为1,说明与第一种方法不同,没有使用MATLAB调用python函数,而是通过cmd运行了py脚本。
这种方法免去了繁琐的设置安装过程,也无需对应MATLAB版本与python版本,更无需在安装其他python版本后重新安装扩展库。
但此种方法也面临着变量等数据传递的问题,建议使用文件进行数据传递。
因此,两种方法各有优劣之处,应就具体使用情况具体选择采用。
附:添加环境变量方法
若在安装Anaconda时未勾选添加至环境变量,则直接在cmd中使用python命令会报错,需要将python路径添加至环境变量
右键“此电脑”点击属性->高级系统设置->环境变量->系统变量中的PATH->新建添加如下路径:
对应自己anaconda安装位置添加路径,保存后即可。