1、问题的提出:

在一些web服务中,后台采用nodejs轻量化服务器接口,而matlab的.m文件编写了算法模块,两者调用时,官方没有提供相应的文档(当然也可能我没找到)。因此,本文提出了matlab的.m文件-python-nodejs的解决方案。

2、python调用matlab文件

java 调用matlab脚本 js调用matlab_java 调用matlab脚本

不同matlab版本支持不同python版本。本机采用matlab 2017b+python 3.5.6版本

①、(如果未安装python,请跳过此步骤)通过conda命令检测python

conda info --envs

java 调用matlab脚本 js调用matlab_matlab_02

我这个版本是3.9的,因此需要创建虚拟环境,安装3.5版本的python

conda create -n py3 python=3.5.6
:: 再次输入环境查询命令
conda info --envs

java 调用matlab脚本 js调用matlab_python_03

进入这个文件后,输入命令,即可激活环境

activate py3

进入matlab 2017b的  “..\extern\engines\python”环境,输入命令

Python setup.py install

java 调用matlab脚本 js调用matlab_开发语言_04

 出现上图就是安装好了,然后将目录下新出现的文件夹“..\build\lib\matlab”移动到你虚拟环境下的“Lib\site-packages”,正常安装后,“Lib\site-packages”目录下会直接出现“matlab”文件夹

java 调用matlab脚本 js调用matlab_matlab_05

②、pycharm 中新建python项目,并建立test.py文件,将matlab的.m文件拖入到同一目录下

③、复制代码,可以看到运行结果

java 调用matlab脚本 js调用matlab_python_06

!!!注意: 写代码的时候,如果采用nargout=0这个参数,如果.m文件内容为函数(无输出参数的函数),则会出现下图所示的没有返回值的情况,这个时候,我们仅仅需要给.m文件里的函数一个随意的输入变量即可保证python可以正常接收.m文件的返回值。

java 调用matlab脚本 js调用matlab_java 调用matlab脚本_07

!!!其次:matlab代码函数只能返回结构体数据,数据均被result包裹。

java 调用matlab脚本 js调用matlab_matlab_08

最后,如果出现“不受支持的 Python 数据类型: numpy.ndarray”问题,使用如下命令即可操作。matlab.double只能操作matlab.engine接口返回的列表数据,如果数据只有一个,则直接引用即可。

java 调用matlab脚本 js调用matlab_python_09