转置NxN矩阵

时间:2013-10-22 10:34:11

标签: java math matrix

我有一个NxN矩阵,它试图通过这段代码转置它:

    for(int i = 0; i < mat_size; ++i) {
        for(int j = 0; j < mat_size; ++j) {
            double tmpJI = get(j, i);
            put(j, i, get(i, j));
            put(i, j, tmpJI);
        }
    }

它不起作用,有什么问题?提前谢谢。

5 个答案:

答案 0 :(得分:10)

由于您自己交换整个矩阵,因此无法正常工作。你需要做的是将上三角形与下三角形交换:

for(int j = 0; j < i; ++j) {

是一种方式。

答案 1 :(得分:2)

从0开始到mat_size会让你对整个矩阵重新排序两次,再次获得原始矩阵。

更改为:

for(int i = 0; i < mat_size; ++i) {
    for(int j = 0; j < i; ++j) {
        double tmpJI = get(j, i);
        put(j, i, get(i, j));
        put(i, j, tmpJI);
    }
}

答案 2 :(得分:1)

只有在j&gt;时才需要交换一世。所以内循环必须从i + 1开始。对于j == i(中心对角线),也不需要交换。

你的解决方案不起作用,因为你实际上交换了两次(一次是j = x,i = y,一次是j = y,i = x。

答案 3 :(得分:0)

例如,交换(2,5)i = 2,j = 5,i = 5,j = 2。交换两次没有任何作用。

for(int i = 0; i < mat_size; ++i) {
    for(int j = 0; j < i; ++j) {
        double tmpJI = get(j, i);
        put(j, i, get(i, j));
        put(i, j, tmpJI);
    }
}

答案 4 :(得分:0)

这是因为当迭代到达对角线的另一侧时,在矩阵的下三角形中交换的元素将再次交换。那就是元素被交换了两次而没有结果。 尝试:

for(int i = 0; i < mat_size; ++i) {
for(int j = 0; j < i; ++j) {
    double tmpJI = get(j, i);
    put(j, i, get(i, j));
    put(i, j, tmpJI);
  }
}