如何使用适当的格式化打印RealMatrix

时间:2018-04-03 00:49:34

标签: java arrays apache-commons-math

我在我的项目中使用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");
        }

outputing:

    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());

outputing:

Array2DRowRealMatrix{{1.0,0.0,0.0},{2.0,1.0,1.0},{3.0,2.0,0.0}}

如何使用RealMatrix获得与第一种情况相同的输出?从我自己尝试做的错误消息中,似乎如果我可以将realmatrix转换回数组,它将解决我的问题,但我无法设法做到这一点......

编辑-1:当我试图解决这个问题时,我发现在数组中获取矩阵运算的结果会非常有用,或者至少是一种从中读取特定值的方法。 / p>

编辑-2:添加了Java标记

2 个答案:

答案 0 :(得分:0)

您可以使用getData将基础数据作为二维数组获取。实现通常会返回此方法的数据副本。某些实现公开了一个getDataRef方法,该方法返回对底层数据本身的引用。使用其中一种,您可以根据需要格式化数据。

答案 1 :(得分:0)

通用数学具有将矩阵格式化为字符串的功能。它位于RealMatrixFormat下。这是一个简单的示例(在Kotlin中),它将生成一个类似于输出的表:

val TABLE_FORMAT = RealMatrixFormat("", "", "", "\n", "", ", ")

println(TABLE_FORMAT.format(mat2x3))

产生:

0, 0, 0
1, 2, 3