【问题标题】:How to get a column from a 2D java array?如何从二维 java 数组中获取一列?
【发布时间】:2010-11-09 20:46:38
【问题描述】:

我知道二维数组是数组的数组。要获得一行,您可以这样做:

rowArray = my2Darray[row]

由于每一行可以有不同的大小,我假设它不是内置从二维数组中获取一列的。它使我相信您必须执行以下操作:

for(int row = 0; row < numRows; row++)
{
    colArray[row] = m2Darray[row][columnOfInterest];
}

这是正确的吗?这是唯一的方法吗?

【问题讨论】:

  • 你的意思是colArray[row] = m2Darray[row][columnOfInterest];
  • 如果您必须访问很多列,也许将矩阵转置作为预处理步骤,然后访问转置矩阵的行可能会有所帮助。

标签: java arrays multidimensional-array


【解决方案1】:

如果您被锁定为使用二维数组,那么是的,这就是 afaik。但是,一个可能对您有帮助的建议(如果可能的话):

将数组包装在处理列提取的类中。

祝你好运。

【讨论】:

    【解决方案2】:

    Commons math 有一些您可能想查看的工具:

    double[][] data = new double[10][10];
    BigMatrix matrix = MatrixUtils.createBigMatrix(data);
    matrix.getColumnAsDoubleArray(0);
    

    Commons Math Library

    【讨论】:

      【解决方案3】:

      你的路就是你要走的路。但是,如果您必须多次这样做,我可能会建议将其存储在列中。 (或两种方式)

      【讨论】:

        【解决方案4】:

        其实我会写这个作为评论,但我的声誉仍然很低,所以我必须回答:

        你的意思是:

        for(int row = 0; row < numRows; row++)
        {
            colArray[row] = m2Darray[row][columnOfInterest];
        }
        

        顺便说一句:我想你是对的。没有更简单的方法。

        【讨论】:

          【解决方案5】:
          int[][] array = new int[rows][coloumn];
          
          for (int i = 0 ; i < array.length ; i++) {
              for (int j = 0 ; j < array[].length; j++) {
                  int col = array[j][i]; 
              }
          }
          

          【讨论】:

            【解决方案6】:

            实际上最新版本的 Apache Commons (3.5) 没有 BigMatrix 类。取而代之的是,我们可以使用 RealMatrix

            double[][] data = new double[10][10];
            RealMatrix rm = new Array2DRowRealMatrix(data);
            rm.getColumn(i);
            

            【讨论】:

              【解决方案7】:
                  /**
                   input data
                  **/
                  int[][] r = {
                          {1, 2},
                          {3, 4}
                  };
                  //the colum index
                  int colIndex = 1;
                  Integer[] col = Arrays.stream(r).stream().map(arr -> arr[colIndex]).toArray(size -> new Integer[size]);
                  //col data
                  for (Integer integer : col) {
                      System.out.println(integer);
                  }
              

              这里会打印一整列的二维矩阵数据。

              【讨论】:

                【解决方案8】:

                另一种方法是将行存储为列,反之亦然。例如我需要做完全相同的事情,我最初计划有一个包含 10 行和 2 个列的数组。由于这个限制,我只是交换了行和列并创建了一个包含 10 列和 2 行的数组。然后我可以使用 array[0] 从新数组中获取行(这将是我原始数组的一列)。当然,只有当您是该数组的创建者时,您才具有这种灵活性。

                希望对您有所帮助...

                【讨论】:

                  【解决方案9】:

                  您必须使用 StringBuilder 类在字符串末尾追加新字符

                      StringBuilder s=new StringBuilder();
                      for(int i=0;i<n;i++)
                          s.append(arr[i][column]);
                  

                  【讨论】:

                    【解决方案10】:

                    偶然看到这篇文章。对列数组执行数组复制或操作等操作的另一种方法是转置数组/矩阵。

                    简单来说

                    • 一个。转置 2Darray / 矩阵(即 6x5 ==> 5x6 2Darray)
                    • 对列数组执行操作
                    • 再次转置 ==> 回到原来的 2Darray。

                    这种方法已用于接缝雕刻——图像裁剪技术

                    【讨论】:

                      【解决方案11】:

                      试试这个

                      int column = 3;
                      double result = array[][column];
                      

                      祝你好运

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2022-01-06
                        • 2022-01-04
                        • 2013-05-14
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多