将 double[][] 转换为 Java 中的 MATLAB 矩阵的最快方法是什么?

What is the fastest way to get double[][] to a MATLAB matrix in Java?

我需要在 Java 中将 MATLAB/Octave 与 ProcessBuilder class 一起使用。我有一个参数,它将是一个非常非常长的字符串,形状为 MATLAB/Octave 数组。

[1 2 3 4;
 4 5 6 3; 
 .
 .
 .
 3 4 2 5]

所以我开始编写代码,其中 A 是矩阵,matA 将成为 ProcessBuilder 对象中的参数。

    String matA = "[";
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < columns; j++) {
            matA = matA + " " + A[i][j];
        }
        if(i < rows-1)
            matA = matA + ";";
    }
    matA = matA + "]";
    System.out.println(matA);

像这样:

        ProcessBuilder processBuilder = new ProcessBuilder(matA);
        processBuilder.command("singularvaluesdecomposition.m");
        try {
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

我的 MATLAB/Octave 文件如下所示:

function singularvaluesdecomposition(A)
    [U, S, ~] = svd(A);
    U
    diag(S)
end

但是构建 matA 需要大量的时间。有更快的方法吗?

当数据变化很大时,最好使用StringBuilder 而不是String。 字符串是不可变的,更改它们是通过创建另一个对象来完成的,尽管用户无法在视觉上看到它。

试试这个:

StringBuilder matA = new StringBuilder("[");
for(int i = 0; i < rows; i++) {
    for(int j = 0; j < columns; j++) {
        matA.append(" " + A[i][j]);
    }
    if(i < rows-1)
        matA.append(";");
}
matA.append("]");
System.out.println(matA);

了解更多信息: https://javapapers.com/java/java-string-vs-stringbuilder-vs-stringbuffer-concatenation-performance-micro-benchmark/