如何从一个2D Java数组中获取一列?

24

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

rowArray = my2Darray[row]

由于每行的大小可能不同,我假设没有内置方法可以从二维数组中获取列。这让我相信你需要像这样做:

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

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


1
您是否是想要写colArray[row] = m2Darray[row][columnOfInterest];呢? - ChssPly76
如果你需要访问很多列,或许在预处理步骤中转置矩阵,然后访问转置矩阵的行可能会有所帮助。 - rahs
11个回答

9
如果您被限制使用二维数组,那么是的,这就是我所知道的。然而,如果可能的话,一个建议可能会对您有所帮助:将数组包装在一个处理列提取的类中。祝好运。

7

Commons Math有一些工具可能会对您有帮助:

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

Commons Math 库


2

你的方法是正确的。但是,如果你需要多次这样做,我建议将其存储在列中。(或者两种方法都可以)


1

实际上,我本来会把这写成评论的,但是我的声望还不够高,所以我只能回答:

你的意思是猜测:

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

顺便说一下:我想你是正确的。没有更简单的方法。


1
    /**
     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);
    }

这里将会打印出2D矩阵中的一整列数据。

1
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]; 
    }
}

1

实际上,Apache Commons的最新版本(3.5)没有BigMatrix类。相反,我们可以使用RealMatrix。

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

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

希望这能帮到你...


-1
你需要使用 StringBuilder 类来在字符串的末尾追加新字符。
    StringBuilder s=new StringBuilder();
    for(int i=0;i<n;i++)
        s.append(arr[i][column]);

-2

刚好偶然看到这篇文章。在列数组上执行诸如数组复制或操作的另一种方法是转置您的数组/矩阵。

简而言之

  • a. 转置2D数组/矩阵(即6x5 ==> 5x6 2D数组)
  • 对列数组执行操作
  • 再次转置==>回到原始的2D数组。

这种方法已经被用于缝合雕刻-图像裁剪技术。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接