如何从二维 java 数组中获取一列?

Posted

技术标签:

【中文标题】如何从二维 java 数组中获取一列?【英文标题】:How to get a column from a 2D java array? 【发布时间】: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]; 如果您必须访问很多列,也许将矩阵转置作为预处理步骤,然后访问转置矩阵的行可能会有所帮助。 【参考方案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];

祝你好运

【讨论】:

以上是关于如何从二维 java 数组中获取一列?的主要内容,如果未能解决你的问题,请参考以下文章

获取二维数组中某一列的最小值

如何从 Firebase 推送/获取数据并使用 Java 添加到二维数组?

从 Java 中的二维数组矩阵中获取行和列

JAVA中如何对二维数组的每一列进行排序

Eloquent 只获取一列作为数组

JAVA中如何对二维数组的每一列进行排序