我在项目中使用 apache-commons-math RealMatrix 来处理矩阵运算,但是我无法以正确的格式打印它。
对于到目前为止我拥有的每个矩阵,它都是这样的:
double coord[][] = new double[3][3];
coord[0][0] = 1d;
coord[0][1] = 0d;
coord[0][2] = 0d;
coord[1][0] = 2d;
coord[1][1] = 1d;
coord[1][2] = 1d;
coord[2][0] = 3d;
coord[2][1] = 2d;
coord[2][2] = 0d;
System.out.println("coordinates [nó, x, y]");
for(int co = 0 ; co < 3 ; co++){
for(int or = 0 ; or < 3 ; or++){
System.out.printf("%10.5f\t",coord[co][or]);
}
System.out.print("\n");
}
输出:
coordinates [nó, x, y]
1,00000 0,00000 0,00000
2,00000 1,00000 1,00000
3,00000 2,00000 0,00000
但是当我使用 RealMatrix 打印时,它只以字符串形式打印(据我自己找到),如下所示:
double coord[][] = new double[3][3];
coord[0][0] = 1d;
coord[0][1] = 0d;
coord[0][2] = 0d;
coord[1][0] = 2d;
coord[1][1] = 1d;
coord[1][2] = 1d;
coord[2][0] = 3d;
coord[2][1] = 2d;
coord[2][2] = 0d;
RealMatrix m = MatrixUtils.createRealMatrix(coord);
System.out.println(m.toString());
输出:
Array2DRowRealMatrix{{1.0,0.0,0.0},{2.0,1.0,1.0},{3.0,2.0,0.0}}
如何使用 RealMatrix 获得与第一种情况相同的输出?从我尝试自己执行此操作时收到的错误消息来看,似乎如果我可以将实数矩阵转换回数组,它将解决我的问题,但我也无法做到这一点...
编辑1:当我试图解决这个问题时,我发现在数组中获取矩阵运算的结果会非常有帮助,或者至少是一种从中读取特定值的方法。
编辑2:添加Java标签
Apache 的
commons-math
有一个将矩阵格式化为字符串的工具,它位于 RealMatrixFormat 中。这是一个简单的示例,它将生成类似输出的表格:
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.RealMatrixFormat;
public class Main {
public static void main(String[] args) {
double data[][] = new double[2][3];
data[0][0] = 11;
data[0][1] = 12;
data[0][2] = 13;
data[1][0] = 21;
data[1][1] = 22;
data[1][2] = 23;
RealMatrix matrix = MatrixUtils.createRealMatrix(data);
RealMatrixFormat matrixFormat = new RealMatrixFormat("", "", "", "\n", "", ", ");
System.out.println(matrixFormat.format(matrix));
}
}
产生:
11, 12, 13
21, 22, 23
您可以使用
getData
获取二维数组形式的基础数据。实现通常会从此方法返回数据的副本。 一些实现公开了一个 getDataRef
方法,该方法返回对底层数据本身的引用。 使用其中之一,您可以按照自己喜欢的方式格式化数据。