java - 在 Java 中将 double[][] 获取到 MATLAB 矩阵的最快方法是什么?

标签 java matlab matrix octave processbuilder

我需要将 MATLAB/Octave 与 Java 中的 ProcessBuilder 类一起使用。我有一个参数,它将是一个非常非常长的字符串,形状为 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/

关于java - 在 Java 中将 double[][] 获取到 MATLAB 矩阵的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61836308/

相关文章:

java - Jersey ContainerRequestFilter - 修改查询参数不会修改 Controller 中的上下文请求

scripting - 有没有办法在没有 GUI 的情况下从特定行运行 MATLAB 脚本?

c++ - 如何在 C++ 中使用 dll 文件?

python - 使用 NumPy 计算特征向量的说明

c++ - 在 maya API 中计算 worldMatrix

java - Spark 驱动程序的 RMI 库导致 Full GC 暂停(System.gc())

java - 方法类似于 ObjectInputStream 的 Scanner.hasNext

java - 根据类参数在函数中创建对象

java - 如何将 libsvm 模型加载到 Android 中

C++ : Math library that solve system of equations using back substitution algorithm