如何使用表格格式打印实数矩阵

Posted

技术标签:

【中文标题】如何使用表格格式打印实数矩阵【英文标题】:How to print a RealMatrix with table formating 【发布时间】:2018-09-12 05:25:22 【问题描述】:

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

输出:

Array2DRowRealMatrix1.0,0.0,0.0,2.0,1.0,1.0,3.0,2.0,0.0

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

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

编辑 2:添加 Java 标记

【问题讨论】:

作为一般规则添加语言标签是个好主意。 【参考方案1】:

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

【讨论】:

我建议给出一个 java 示例,因为问题是用 java 标记的。【参考方案2】:

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

【讨论】:

以上是关于如何使用表格格式打印实数矩阵的主要内容,如果未能解决你的问题,请参考以下文章

C程序如何以表格格式对齐打印

如何避免跨页面拆分 HTML 表格

以矩阵格式打印出二维数组

如何避免 mjson.tool 中的实数转换

如何打印大维度的混淆矩阵

vue 解决打印预览格式错乱