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

问题描述 投票:0回答:1

我需要在Java中将MATLAB / Octave与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需要花费大量时间。有更快的方法吗?

java matlab matrix octave processbuilder
1个回答
0
投票

当大量更改数据时,最好使用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/

© www.soinside.com 2019 - 2024. All rights reserved.