Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转置一个NxN矩阵_Java_Math_Matrix - Fatal编程技术网

Java 转置一个NxN矩阵

Java 转置一个NxN矩阵,java,math,matrix,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); } } for(int i=0;i

我有一个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);
        }
    }
for(int i=0;i
它不起作用,有什么问题吗?提前感谢。

例如,(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);
    }
}
for(int i=0;i
它不起作用,因为您正在将整个矩阵与自身交换。您需要做的是将上面的三角形与下面的三角形交换:

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

是单向的。

从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);
    }
}
for(int i=0;i
只有当j>i时才需要交换。因此内部循环必须从i+1开始。对于j==i(中心对角线),也不需要交换


你的解决方案不起作用,因为你实际上交换了两次(一次是用j=x和i=y,一次是用j=y和i=x)。这是因为你在矩阵的下三角中交换的元素在迭代到达对角线的另一边时再次交换。也就是说,元素交换了两次,结果什么都没有。 尝试:

for(int i=0;i
您是否可以添加“get(j,i)”和“put(i,j,tmp)”方法的实现。@SilviuBurcea问题出了什么问题?@AliAlamiri:没有关键代码(get,put方法),如果不尝试解决问题,它就无法工作……调试2分钟就足以解决问题。@SilviuBurcea我确信,如果OP为这两种方法编写了代码,有人会因为在一个问题中添加了太多代码而告诉他错误的……像往常一样,他会被指向SSCCE。我没有添加put和get,因为这是一种复杂的矩阵类型(我忘了它的名字)所以它对你没有帮助..正如评论所说的,问题是索引j停止了,需要刷新我在线性代数中所学的..谢谢!
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);
  }
}