【问题标题】:Transpose a matrix giving me error when column>row当列>行时转置一个矩阵给我错误
【发布时间】:2021-11-13 22:32:39
【问题描述】:

我想转置矩阵 代码在 column=row 和 column>row 时有效 但是当行>列时我得到错误的答案

所有代码:

#include <stdio.h>
#include <stdlib.h>


 int main() {int row,column,tmp;
    scanf("%d",&row);
    scanf("%d",&column);
 int *image=(int*)malloc(sizeof(int)*row*column);
     int *target=(int*)malloc(sizeof(int)*row*column);
     for(int i=0;i<row;i++){
         for(int j=0;j<column;j++){
             scanf("%d",&tmp);
             image[i*column+j]=target[i*column+j]=tmp;
         }
     }
   transpose(row,column,target,image);
for (int i = 0; i< m; i++) {
    for (int j = 0; j < n; j++)
        printf("%d\t", target[i*column+j]);
    printf("\n");
}}
void transpose(int row, int column,int* target,int* image) {
    
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                target[j * column + i] = image[i * column + j];
            }
        }
    
    }

我在图像中的矩阵,我想在目标中转置。

input : 
1   2
3   4
5   6

output(what i get from my code) :
1   3   5   
5   4   6   
output (what should i get ) :

1   3   5
2   4   6

input work : 
1 2 3 
4 5 6
output : 
1 4
2 5
3 6

【问题讨论】:

  • 请显示您调用transpose-function 的代码;
  • edit您的问题并创建一个minimal reproducible example。我建议添加一个main 函数来提供必要的变量,用硬编码的输入值填充数组,调用transpose 并打印结果。
  • 请注意targetimage 有不同的column 值(一个应该是row,如果你正在转置),在你用来计算指数的公式中。
  • imagetarget 具有不同的宽度,但您使用相同的 column 引用它们。
  • 图像和目标的宽度相同(m*n)

标签: c matrix transpose


【解决方案1】:

要了解您在做什么,我建议您打印在您的算法中计算的索引值。
问题是i 可以大于column(与jrow 相同)。您必须使用% 来改进您的代码。

【讨论】:

  • 我试过还是错了
【解决方案2】:

正如@Bob_ 建议的那样,您错误地计算了目标数组的偏移量。

您的源图像有column 列和row 行;但转置后的图像为row 列和column 行! (顺便说一句 - 这是一个糟糕的标识符选择;考虑 num_columnsnum_rows 作为转置函数的参数)。所以我相信你需要:

target[j * row + i] = image[i * column + j];

在你的内部循环中。

【讨论】:

  • 我试过 { target[j * row + i] = image[i * column + j]; } ,但仍然无法输出 {1 3 5 5 2 4 }
  • @jadegbaria:如果你提供了一个完整的程序,我可能会提供帮助。
  • 我编辑并添加了完整程序
  • @jadegbaria:不,你没有。
  • 你需要什么零件?
猜你喜欢
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2012-03-11
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
相关资源
最近更新 更多