gpt4 book ai didi

java - 如何运行Matlab编译的Java函数?

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:00 26 4
gpt4 key购买 nike

我已经使用 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
. . . .

首先读取变量中单独函数中的数据。同时获取 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 是您的数组的大小。

关于java - 如何运行Matlab编译的Java函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com