在Java中获得MATLAB矩阵的double[][]的最快方法是什么?

在Java中获得MATLAB矩阵的double[][]的最快方法是什么?,java,matlab,matrix,octave,processbuilder,Java,Matlab,Matrix,Octave,Processbuilder,我需要在Java中使用MATLAB/Octave和ProcessBuilder类。我有一个参数,它将是一个非常非常长的字符串,形状为MATLAB/倍频程数组 [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;

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

[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);
我的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);
StringBuilder matA=新的StringBuilder(“[”);
对于(int i=0;i
有关更多信息:

谢谢。快多了!但现在我又犯了一个错误<代码>线程“main”java.lang.OutOfMemoryError中的异常:java堆spac
也许我应该尝试从java.lang.OutOfMemory调用Python代码以增加堆大小。例如,如果您正在终端中运行代码,请使用:java-Xmx6g myclassI我正在使用Eclipse。改为从ProcessBuilder发送双[][]数组是更好的方法吗?在Eclipse.ini文件或从gui follow中编辑或添加-Xmx6g
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);