我试图用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;
}
}
为了澄清,代码应该能够将第一列的所有行与第二列的所有行交换,然后将第一行的所有列与第二行的列交换。
“...我试图将矩阵的行和列与下一个矩阵交换...”
供参考,在数学中,这被称为转置。
这是相关的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]