如何运行 matlab编译Java函数?

How to run Matlab compiled Java function?

我已经使用 Matlab 编译器 SDK 将 Matlab 脚本编译为 Java。 一切正常。 Matlab 生成了一个 Jar.file 并且我将其包含在我的 Java 项目中的 Eclipse 中。 现在我的问题是,matlab 脚本包含一个复杂的算法函数。 现在可以在 Java 中调用此函数。 我需要读取 10 个 csv 文件,每个文件包含 10.000 行和 4 列数据,现在将与我在 matlab 中所做的相同的参数传递给 java 函数。

我的 csv 文件的方式是:4 列,10.000 行。

a x y z
1 3 4 5
4 4 5 6
. . . .

首先在单独的函数中读取数据 variables.Also 获取 a 的长度。

[a,x,y,z] = readData(['csv\' files(1).name]);
sizeOfa=length(a);

在我用不同的列调用我的算法函数 3 次并传递 a 的大小之后。

   algorithm(a,x,sizeOfa);
   algorithm(a,y,sizeOfa);
   algorithm(a,z,sizeOfa);

在此之后,我的算法定义就来了。

function y= algorithm(x,y,sizeofX)
   do some stuff...
   end

现在我的问题是:

我从 c​​sv 文件读取的值存储在 Matlab 中的 10000*1 矩阵中。 如果我现在想在 Java 中调用相同的函数。 我应该将什么传递给我的函数? 我可以在单独的数组中读取我的值 a、x、y、z。 但是数组是 1*10000。 我可以只传递一个数组吗? readfile函数没有编译成java,我只是编译了我的算法函数。

我找到了两个解决问题的方法。

MATLAB 解决方案

我的 Matlab 函数使用了 10000*1 数组。是这样的矩阵

1
2
3
4
..
10000

传递给编译函数的Java数组会有所不同。看起来像这样

1 2 3 4 .. 10000

现在解决这个问题的方法是,我转换传递给我的 matlab 函数的参数。

   function y = algorithm(a,z,sizeOfa)
    {
      a=a'; // transpose 
      z=z'; //transpose
       ...
         //your stuff

    }

现在,如果我将我的数组传递到我的 java 函数中,该数组将在内部转置为矩阵。

编辑: 找到更好的解决方案

Java 解决方案

double[] t;  // your Double Array

int tSize= t.length; // get Size

MWNumericArray result;

result= MWNumericArray.newInstance(new int[]{tSize,1},t,MWClassID.DOUBLE);

将结果传递给你的函数,它被转换为一个 n*1 数组,其中 n 是你的数组的大小。