c - 一维数组中的矩阵转置

标签 c arrays matrix-multiplication

尝试创建一个在给定数组内转置矩阵的函数。

我的转置函数如下所示:

void transpose(int a[], int rowSize, int colSize){
    int d[size];
    for (int i = 0; i < rowSize; i++) {
       for (int j = 0; j < colSize; j++) {
          int index1 = i*colSize+j;
          int index2 = j*rowSize+i;

          d[index2] = a[index1];
       }
    }

    for (int i=0; i<size; i++) {
        a[i] = d[i];
    }
    for (int i = 0; i < size; i++) {
    if (i % colSize == 0) {
      printf("\n");
    }
    printf("%d ", d[i]);
  }
}

但是给定一个数组/矩阵:

int c[size] = {
    1,  4,
    2,  3,
    3,  2,
    4,  1 
    };

它返回:

1 3 4 2
2 4 3 1

所需的矩阵应如下所示:

1 2 3 4
4 3 2 1

最佳答案

这又是同样的逻辑。在这里,如果您使用附加数组,那么它将类似于数组的有序遍历。

void transpose(int a[], int colSize, int rowSize) {
    /* int *d = malloc(sizeof(int)*colSize*rowSize);
    if( d == NULL){
       fprintf(stderr,"%s","Error in malloc");
       exit(1);
    }
    */
    int d[rowSize*colSize];
    int sz=0;
    for(int j=0;j<colSize;j++)
      for(int i=0;i<rowSize;i++)
        {
            d[sz++]=a[i*colSize+j];
        }
    for(int i=0;i<sz;i++)
        a[i]=d[i];
    // free(d);
}

对代码进行一些评论:-

  • 每当您使用 malloc 时,请检查它的返回类型。如果没有分配任何内容,那么您将防止爆炸。

  • 工作完成后,必须释放动态分配的内存。它可以帮助您避免内存泄漏。

C99、C11 中提供 VLA 支持。

关于c - 一维数组中的矩阵转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022401/

相关文章:

创建具有不同扩展名的新文件

python - 如何在不使用循环的情况下重写 NumPy 代码

python - Python 中的 XOR 矩阵乘法

matlab - 如何减少存在 for 循环和矩阵向量乘法的计算时间

c - 如何使用 C 中的 read() 函数读取整数和字符?

c - 对 `yywrap` 的 undefined reference

c - 对PIC24单片机使用中断服务程序

python - 连接具有不同第一维的二维数组

arrays - 将csv转换为不同的格式

objective-c - 将 Objective C 转换为 C 矩阵操作