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