之前在导师手上一直做的事工程相关的开发工作,虽然目前做的还是不行,倒是已经在准备玩机器学习了。又是一片未知领域,希望路不要走偏了。
由于我只负责一些项目的工程部分,在算法调用这方面,我非常被动,我只能去适应别人。于是乎,有些人用MATLAB,有些人用Python,反正做完之后都丢给我,至于我用Java怎么调用,无可奉告。
不过很显然这些东西被我搞定了,不然也不会有这篇文章。下一篇不出意外,会介绍Java调用Python的相关内容,不过咱先从简单的开始,也就是MATLAB。
说这个简单是因为MathWorks已经帮我们做好了一切工作,我们用现成的工具好啦。
我们首先查看一下MATLAB的Java版本,在命令行键入
version -java
MATLAB会返回当前的Java版本,注意,这个版本是MATLAB的Java版本,与本地环境没有关系。在打包时,注意本地Java环境和MATLAB的Java大版本保持一致。目前(2021b)最高支持Java 1.8,对绝大多数人来说应该是够用了,虽然看上去比较旧。
其他语言也是一样的方法,我这边提供一张表,仅供参考,这张表也可以在MathWorks官方找到:MATLAB Interfaces to Other Languages
我们首先写一个非常简单的函数用于测试(真的很简单)。
然后我们到APP库中,选择Library Compiler,就在这儿!
这就是MATLAB为我们提供的打包📦工具箱了。
打包设置是比较简单的,我在下面标注的很清楚了。主要填写类的信息就可以了。注意,MATLAB只能选择函数文件打包,脚本文件是不行的,当然啦,稍微改改,就可以把脚本文件给改成函数文件了。
搞完之后,Package,等一等就可以了,很快的。
全部搞定之后,剩下的就不关MATLAB的事情了。我们直接转到IDEA进行剩下的操作。
打包后的文件夹大致是这样,我们只需要打开其中的“for_testing”文件夹就可以找到Jar包了,我们将其添加到项目依赖。当然,还需要一个依赖,就是MATLAB提供的Builder包。路径如下:
.../toolbox/javabuilder/jar
然后我们编写一个简单的测试类,作为测试。
public class Plus {
public static void main(String[] args) throws MWException {
mPlus Test=new mPlus();
Object[] Res=Test.myPlus(1,1,2);
System.out.println(Res[0]);
}
}
注意这段代码:
Object[] Res=Test.myPlus(1,1,2);
由于Java语言的限制,仅能有一个返回值,所以MATLAB将返回值统一定为Object。之所以用数组,是要对付返回值不止一个的情况。我们在myPlus方法中,传递的第一个参数就是指返回值的个数,这里我们传入“1”,表示有一个返回值的意思,后面两个参数当然是让方法计算1+2的结果。
输出结果我就不放出来了😂
乍一看界面以为是Idea…
就是IDEA😂