MATLAB への Java 配列引数の引き渡し
MATLAB 関数の 2 次元配列引数
一部の MATLAB® 関数は、2 次元配列を単独の入力引数として受け入れ、この配列の列を個別に使用します。既定では、2 次元配列を Java® から MATLAB に渡した場合、配列は 2 番目の次元に沿って別々の引数に分割されます。この問題を回避するには、2 次元配列を Object
にキャストします。
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}}; HandleObject[] h = eng.feval("plot", (Object) data);
多次元配列
MATLAB と Java ではそれぞれ異なる表現によって多次元配列を表示します。しかし、インデックス式により同じ結果が生成されます。たとえば、次のコード例では、MATLAB で 3 つの次元をもつ配列を定義しています。この配列変数は Java に渡され、インデックスによる参照の結果が比較されます。
import com.mathworks.engine.*; import java.io.StringWriter; import java.util.Arrays; public class ArrayIndexing { public static void main(String[] args) throws Exception { MatlabEngine eng = MatlabEngine.startMatlab(); StringWriter writer = new StringWriter(); eng.eval("A(1:2,1:3,1) = [1,2,3;4,5,6];"); eng.eval("A(1:2,1:3,2) = [7,8,9;10,11,12]"); double[][][] A = eng.getVariable("A"); System.out.println("In Java: \n"+ Arrays.deepToString(A)); eng.eval("A(1,1,:)",writer,null); System.out.println("A(1,1,:) " + writer.toString()); System.out.println("Java [0][0][0] " + A[0][0][0]); System.out.println("Java [0][0][1] " + A[0][0][1]); } }
以下は、MATLAB と Java での配列の表示形式を示すプログラム出力です。MATLAB の場合は次のようになります。
A(:,:,1) = 1 2 3 4 5 6 A(:,:,2) = 7 8 9 10 11 12 In Java: [[[1.0, 7.0], [2.0, 8.0], [3.0, 9.0]], [[4.0, 10.0], [5.0, 11.0], [6.0, 12.0]]]
以下は、各外次元の最初の要素へのインデックスによる参照を示す結果です。
A(1,1,:) ans(:,:,1) = 1 ans(:,:,2) = 7 Java [0][0][0] 1.0 Java [0][0][1] 7.0
MATLAB と Java で、インデックス式の結果は同じです。