簡體   English   中英

如何運行Matlab編譯的Java函數?

[英]How to run Matlab compiled Java function?

我用Matlab編譯器SDK編譯了一個Matlab腳本到Java。 一切都很好。 Matlab生成了一個Jar.file,我把它包含在eclipse中的Java Project中。 現在我的問題是,matlab腳本包含一個復雜的算法函數。 現在可以在Java中調用此函數。 我需要讀取10個csv文件,每個文件包含帶有4列數據的10.000行,現在將相同的參數傳遞給我在matlab中的java函數。

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

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

readfirst數據在變量的單獨函數中。也得到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);

將結果傳遞給您的函數,它將轉換為* 1數組,其中n是數組的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM