在Java中切换矩阵的列和行与下一个矩阵

问题描述 投票:0回答:1

我试图用java中的下一个矩阵切换矩阵的行和列,由于某种原因,对于某些位置,我得到的结果是正确的,而对于其他位置则不是。这是在矩阵中进行更改的正确方法还是此代码在某种程度上有错误?

public static  void intercambiar(int[][] vector,int i, int j) {
        for (int k = 0; k < vector.length; k++) {
            int temp = vector[k][j];
            vector[k][j] = vector[k][i];
            vector[k][i] = temp;

            temp = vector[j][k];
            vector[j][k] = vector[i][k];
            vector[i][k] = temp;
        }

    }


为了澄清,代码应该能够将第一列的所有行与第二列的所有行交换,然后将第一行的所有列与第二行的列交换。

java multidimensional-array
1个回答
0
投票

“...我试图将矩阵的行和列与下一个矩阵交换...”

供参考,在数学中,这被称为转置
这是相关的Wikipedia 文章。 维基百科 – 就地矩阵转置

这是一个方阵的示例。

<T> void transpose(T[][] a) {
    T t;
    int m, n, z = a.length;
    for (m = 0; m < z; m++)
        for (n = m + 1; n < z; n++) {
            t = a[m][n];
            a[m][n] = a[n][m];
            a[n][m] = t;
        }
}

输出

before
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

after
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

并且,这是一个矩形矩阵的示例。

<T> T[][] transpose(T[][] a) {
    int m, n, x = a[0].length, y = a.length;
    Class<?> t = a.getClass().getComponentType().getComponentType();
    @SuppressWarnings("unchecked")
    T[][] b = (T[][]) Array.newInstance(t, x, y);
    for (m = 0; m < y; m++)
        for (n = 0; n < x; n++)
            b[n][m] = a[m][n];
    return b;
}

输出

before
[1, 2]
[3, 4]
[5, 6]
[7, 8]

after
[1, 3, 5, 7]
[2, 4, 6, 8]
© www.soinside.com 2019 - 2024. All rights reserved.