exponenta event banner

Передача аргументов массива Java в MATLAB

2-D Аргументы массива для функций MATLAB

Некоторые функции MATLAB ® принимают 2-D массив в качестве единственного входного аргумента и используют столбцы массива отдельно. По умолчанию при передаче массива 2-D в MATLAB из Java ® массив разделяется на отдельные аргументы вдоль второго измерения. Чтобы предотвратить эту проблему, приведите массив 2-D к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. Затем переменная массива передается в 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 результаты индексированного выражения совпадают.

Связанные темы