将 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);
我需要在 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);