【问题标题】:How do i print the columns of a JAMA matrix?如何打印 JAMA 矩阵的列?
【发布时间】:2009-03-11 11:49:49
【问题描述】:

我使用 JAMA.matrix 包..我如何打印矩阵的列

【问题讨论】:

    标签: java matrix jama


    【解决方案1】:

    最简单的方法可能是transpose 矩阵,然后打印每一行。部分示例来自API

    double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
    Matrix a = new Matrix(vals);
    Matrix aTransposed = a.transpose();
    double[][] valsTransposed = aTransposed.getArray();
    
    // now loop through the rows of valsTransposed to print
    for(int i = 0; i < valsTransposed.length; i++) {
        for(int j = 0; j < valsTransposed[i].length; j++) {        
            System.out.print( " " + valsTransposed[i][j] );
        }
    }
    

    正如 duffymo 在评论中指出的那样,绕过转置会更有效,只需编写嵌套的 for 循环来打印列而不是跨行。如果您需要以两种方式打印,这将导致两倍的代码。这是一个足够常见的权衡(代码大小的速度),我让你来决定。

    【讨论】:

    • 那么我们这里有 2 个矩阵,a 和 aTransposed?毫无疑问,它“有效”,但为了打印列,这是一个很大的内存价格。对于这个例子来说这很简单,但任何真正问题的矩阵都会受到很大的影响。
    • 转置方法返回一个新的矩阵,所以例子中有两个。如果你不想同时保留两者,你总是可以说 a = a.transpose()。
    • 我将不得不查看 API,看看在原始矩阵上的简单循环构造是否可以在不需要任何转置的情况下完成这项工作。
    • 我确实链接到了 API,所以你可以看看它。关键是您可以编写一个 printMatrix() 方法来封装示例中的嵌套 for 循环,然后在原始矩阵或转置矩阵上使用它。
    【解决方案2】:

    您可以在矩阵上调用 getArray() 方法来获取表示元素的 double[][]。
    然后,您可以遍历该数组以显示您想要的任何列/行/元素。

    查看API了解更多方法。

    【讨论】:

      【解决方案3】:
      public static String strung(Matrix m) {
          StringBuffer sb = new StringBuffer();
          for (int r = 0; r < m.getRowDimension(); ++ r) {
              for (int c = 0; c < m.getColumnDimension(); ++c)
                  sb.append(m.get(r, c)).append("\t");
              sb.append("\n");
          }
          return sb.toString();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多