如何运行 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
现在我的问题是:
我从 csv 文件读取的值存储在 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 是你的数组的大小。
我已经使用 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
现在我的问题是:
我从 csv 文件读取的值存储在 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 是你的数组的大小。